I have two tables t1
and t2
. Both have id
and name
columns. The name column of t1
is defined as not null and it has the default value of 'Peter'.
I want to insert all the values from t2
into my t1
table. But I have some null values in t2
table. When I try to insert the values:
Insert into t1
select *
from t2;
It throws this error:
Msg 515, Level 16, State 2, Line 1
Cannot insert the value NULL into column 'Name', table 'T1'; column does not allow nulls.
Is there any possibilities to set the default value to the column when we try to insert
the null
value.
First Solution,
insert into t1
select id,isnull(name,'Peter') from t2
Second solution
ALTER TABLE T1 ALTER COLUMN name varchar(255) NULL
insert into t1
select id,name from t2
ALTER TABLE T1 ALTER COLUMN name varchar(255) NOT NULL
So instead of
Insert into t1 select * from t2
you can rewrite your query as
Insert into t1
select col1,col2, ISNULL(name, 'Peter'), othercolumns from t2
Use COALESCE
Query
INSERT INTO t1(Id, Name)
SELECT Id, COALESCE(Name, 'Peter') FROM t2;
Or you can use a CASE
expression.
Query
INSERT INTO t1(Id, Name)
SELECT Id, CASE WHEN Name IS NULL THEN 'Peter' ELSE Name END
FROM t2;
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With