Insert语句检查为空SQL Server 2008
我的小SQL查询只是将数据从旧数据库导入新数据库。我的新数据库不允许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
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