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

7
我有两个表格 t1t2。两个表格都有 idname 列。t1 表格的 name 列被定义为非空,并且它的默认值为 'Peter'。
我想将 t2 表格中的所有值插入到我的 t1 表格中。但是,我在 t2 表格中有一些空值。当我尝试插入这些值时:
Insert into t1 
   select * 
   from t2;

它抛出了这个错误:
Msg 515,级别16,状态2,行1
无法将值NULL插入到列“Name”中,表“T1”;该列不允许为空。
在尝试插入null值时,是否有可能将默认值设置为列?
4个回答

5

第一种解决方案:

   insert into t1
    select id,isnull(name,'Peter') from t2

第二个解决方案
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

1
很抱歉,如果您的列类型为“uniqueidentifier”,并且默认值为“(newid())”,则第三种解决方案将失败。实际上,无论数据类型如何,在“COLUMN_DEFAULT”中的所有函数调用都会失败。 - jakubiszon

2
所以,与其使用

标签,我们可以考虑使用
Insert into t1 select * from t2

您可以将查询重写为:

Insert into t1 
select col1,col2, ISNULL(name, 'Peter'), othercolumns from t2

1
使用 COALESCE

查询

INSERT INTO t1(Id, Name)
SELECT Id, COALESCE(Name, 'Peter') FROM t2;

或者您可以使用CASE表达式。

查询

INSERT INTO t1(Id, Name)
SELECT Id, CASE WHEN Name IS NULL THEN 'Peter' ELSE Name END
FROM t2;

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接