【发布时间】:2023-03-16 15:40:01
【问题描述】:
我的小型 SQL 查询只是将数据从旧数据库导入新数据库。我的新数据库不允许ProjectNo、ProjectName 或LeaderID 成为NULL 值,因此我的代码需要检查该值是否为NULL,如果是,则添加@ 的默认值987654326@和LeaderID(ProjectNo是旧表的主键,所以不能是NULL)。
据我所知,我已经正确编写了 case 语句,但我不断收到以下错误:
无法将值 NULL 插入“ProjectName”列,表 'ERP.dbo.项目';列不允许空值。插入失败。
我也在使用 SQL Server 2008
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
【问题讨论】:
-
使用 ISNULL(col, value)
-
我的代码不能正常工作有什么原因吗?是因为表有“无空值”限制吗?我问的原因是因为我做了一个类似的查询,没有对不同表的限制,它工作得很好
-
更改为
CASE WHEN ProjectName IS NULL THEN 'Unknown' ELSE ProjectName END -
@AaronTroeger 它不起作用的原因是因为您缺少
else部分,因此实际具有值的行将其值替换为空值。 -
如果在case语句中不使用ELSE,sql server使用默认的ELSE,ELSE的默认值为NULL。
标签: sql sql-server insert null case