如何在将空值插入非空列SQL Server时设置默认值?

Din*_*hDB 5 sql sql-server ssms default insert

我有两个表t1t2.两者都有idname列.name列t1定义为not null,默认值为'Peter'.

我想将所有值插入t2到我的t1表中.但是我在t2表中有一些空值.当我尝试插入值时:

Insert into t1 
   select * 
   from t2;
Run Code Online (Sandbox Code Playgroud)

它抛出此错误:

消息515,级别16,状态2,行1
无法将值NULL插入列'名称',表'T1'; 列不允许空值.

当我们尝试使用insertnull值时,是否有可能将默认值设置为列.

Kum*_*rsh 6

第一解决方案

   insert into t1
    select id,isnull(name,'Peter') from t2
Run Code Online (Sandbox Code Playgroud)

二解决方案

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
Run Code Online (Sandbox Code Playgroud)

第三种解决方案:(最佳)

    Declare @GetDefaultValue varchar(255)

    SELECT  @GetDefaultValue= COLUMN_DEFAULT
    FROM INFORMATION_SCHEMA.COLUMNS
    WHERE TABLE_SCHEMA = 'dbo'
      AND TABLE_NAME = 'T1'
      AND COLUMN_NAME = 'name'


 insert into t1 select id,isnull(name,@GetDefaultValue) from t2
Run Code Online (Sandbox Code Playgroud)