插入语句检查为 NULL SQL Server 2008

Aar*_*ger 0 sql sql-server null insert case

我的小型 SQL 查询只是将数据从旧数据库导入到新数据库。我的新数据库不允许ProjectNo,ProjectName或者LeaderID是一个NULL值,所以我的代码需要检查该值是否是NULL,如果是,添加ProjectNameLeaderID(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)

Luk*_*zda 5

使用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)