插入语句检查为 NULL SQL Server 2008

Insert Statement Check Is NULL SQL Server 2008

我的小 SQL 查询只是将数据从旧数据库导入新数据库。我的新数据库不允许 ProjectNoProjectNameLeaderID 成为 NULL 值,因此我的代码需要检查该值是否为 NULL 以及是否就是,给ProjectNameLeaderID加上默认值(ProjectNo是旧的table的主键,所以不能是NULL)。

据我所知,我已经正确地编写了 case 语句,但我不断收到以下错误:

Cannot insert the value NULL into column 'ProjectName', table 'ERP.dbo.Project'; column does not allow nulls. INSERT fails.

我也在使用 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

 INSERT INTO [ERP].[dbo].[Project]
       ([ProjectID]
       ,[ProjectName]
       ,[LeaderID])
 SELECT ProjectNo,
       ISNULL(ProjectName, 'Unknown'),
       ISNULL(ProjectLeaderID, 1)
 FROM Multitech.dbo.Projects

添加缺少的 ELSE,您的代码也可以正常工作。 CASE documentation

ELSE else_result_expression

Is the expression returned if no comparison operation evaluates to TRUE. If this argument is omitted and no comparison operation evaluates to TRUE, CASE returns NULL. else_result_expression is any valid 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