Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Insert语句检查为空SQL Server 2008_Sql_Sql Server_Insert_Null_Case - Fatal编程技术网

Insert语句检查为空SQL Server 2008

Insert语句检查为空SQL Server 2008,sql,sql-server,insert,null,case,Sql,Sql Server,Insert,Null,Case,我的小SQL查询只是将数据从旧数据库导入新数据库。我的新数据库不允许ProjectNo、ProjectName或LeaderID为NULL值,因此我的代码需要检查该值是否为NULL,如果是,则添加ProjectName和LeaderID的默认值(ProjectNo是旧表的主键,因此不能为NULL) 据我所知,我已经正确地编写了case语句,但我一直遇到以下错误: 无法将值NULL插入表的“ProjectName”列中 “ERP.dbo.Project”;列不允许空值。插入失败 我也在使用SQLS

我的小SQL查询只是将数据从旧数据库导入新数据库。我的新数据库不允许
ProjectNo
ProjectName
LeaderID
NULL
值,因此我的代码需要检查该值是否为
NULL
,如果是,则添加
ProjectName
LeaderID
的默认值(
ProjectNo
是旧表的主键,因此不能为
NULL

据我所知,我已经正确地编写了case语句,但我一直遇到以下错误:

无法将值NULL插入表的“ProjectName”列中 “ERP.dbo.Project”;列不允许空值。插入失败

我也在使用SQLServer2008

INSERT INTO [ERP].[dbo].[Project] ([ProjectID], [ProjectName], [LeaderID])
   SELECT 
       ProjectNo, 
       CASE 
          WHEN ProjectName IS NULL THEN 'Unknown' 
       END, 
       CASE 
          WHEN ProjectLeaderID IS NULL THEN 1 
       END 
   FROM 
       Multitech.dbo.Projects
GO
使用

添加缺少的ELSE,您的代码也可以工作

ELSE-ELSE\u结果\u表达式

如果没有比较操作的计算结果为TRUE,则返回表达式。如果省略此参数且没有比较操作的计算结果为TRUE,则大小写将返回NULL。否则\u result\u表达式为任何有效表达式

使用

添加缺少的ELSE,您的代码也可以工作

ELSE-ELSE\u结果\u表达式

如果没有比较操作的计算结果为TRUE,则返回表达式。如果省略此参数且没有比较操作的计算结果为TRUE,则大小写将返回NULL。否则\u result\u表达式为任何有效表达式


使用ISNULL(列,值)但是我的代码不起作用有什么原因吗?是因为表有“无空值”限制吗?我问的原因是因为我在不同的表上做了一个类似的查询,没有限制,它工作得很好,当ProjectName为null时改为“Unknown”,否则ProjectName END@aarontroger它不起作用的原因是什么ork是因为您缺少
else
部分,因此实际具有值的行的值被替换为NULL。如果您在case语句中不使用else,sql server将使用默认的else,而else的默认值为NULL。请使用ISNULL(col,value)但是我的代码不起作用有什么原因吗?是因为表有“无空值”限制吗?我问的原因是因为我在不同的表上做了一个类似的查询,没有限制,它工作得很好,当ProjectName为null时改为“Unknown”,否则ProjectName END@aarontroger它不起作用的原因是什么ork是因为您缺少了
else
部分,所以实际具有值的行的值被替换为NULL。如果您在case语句中不使用else,sql server将使用默认的else,而else的默认值为NULL。好的,很酷。我使用了您最初建议的ISNULL,效果非常好。感谢您花时间在o还要解释为什么它不好用。我使用了你最初建议的ISNULL,它很好用。谢谢你花时间解释为什么它不好用
 INSERT INTO [ERP].[dbo].[Project]
       ([ProjectID]
       ,[ProjectName]
       ,[LeaderID])
 SELECT ProjectNo,
       ISNULL(ProjectName, 'Unknown'),
       ISNULL(ProjectLeaderID, 1)
 FROM Multitech.dbo.Projects
 INSERT INTO [ERP].[dbo].[Project]
       ([ProjectID]
       ,[ProjectName]
       ,[LeaderID])
 SELECT ProjectNo,
        CASE WHEN ProjectName IS NULL THEN 'Unknown' ELSE ProjectName END,
        CASE WHEN ProjectLeaderID IS NULL THEN 1 ELSE ProjectLeaderID END
 FROM Multitech.dbo.Projects