【问题标题】:Insert Statement Check Is NULL SQL Server 2008插入语句检查为 NULL SQL Server 2008
【发布时间】:2023-03-16 15:40:01
【问题描述】:

我的小型 SQL 查询只是将数据从旧数据库导入新数据库。我的新数据库不允许ProjectNoProjectNameLeaderID 成为NULL 值,因此我的代码需要检查该值是否为NULL,如果是,则添加@ 的默认值987654326@和LeaderIDProjectNo是旧表的主键,所以不能是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


【解决方案1】:

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

如果没有比较操作计算结果为 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

【讨论】:

  • 好酷。我使用了您对 ISNULL 的原始建议,效果很好。感谢您花时间解释为什么它不起作用
猜你喜欢
  • 2014-02-28
  • 1970-01-01
  • 1970-01-01
  • 2012-03-19
  • 1970-01-01
  • 2014-02-07
  • 1970-01-01
  • 1970-01-01
  • 2013-10-17
相关资源
最近更新 更多