Aar*_*ger 0 sql sql-server null insert case
我的小型 SQL 查询只是将数据从旧数据库导入到新数据库。我的新数据库不允许ProjectNo,ProjectName或者LeaderID是一个NULL值,所以我的代码需要检查该值是否是NULL,如果是,添加ProjectName和LeaderID(ProjectNo是旧表的主键,所以不能是NULL)的默认值。
据我所知,我已经正确地编写了 case 语句,但我不断收到以下错误:
无法将值 NULL 插入列“ProjectName”、表“ERP.dbo.Project”;列不允许空值。插入失败。
我也在使用 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
Run Code Online (Sandbox Code Playgroud)
使用ISNULL
INSERT INTO [ERP].[dbo].[Project]
([ProjectID]
,[ProjectName]
,[LeaderID])
SELECT ProjectNo,
ISNULL(ProjectName, 'Unknown'),
ISNULL(ProjectLeaderID, 1)
FROM Multitech.dbo.Projects
Run Code Online (Sandbox Code Playgroud)
添加缺少的 ELSE,您的代码也将起作用。 案例文档
ELSE else_result_expression
如果没有比较操作的计算结果为 TRUE,则返回表达式。如果省略此参数并且没有比较操作的计算结果为 TRUE,则 CASE 返回 NULL。else_result_expression 是任何有效的表达式。
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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7435 次 |
| 最近记录: |