首页 > 解决方案 > 无法将“NULL”值插入 SQL Server 列

问题描述

我有一个使用存储过程填充的表。此存储过程使用从另一个数据库调用属性的视图。

为了说明,它类似于:

ALTER PROCEDURE theSp
AS BEGIN
     INSERT INTO dbo.theTable (attr1, att2, amount, attr4)
         SELECT attr1, attr2, amount, attr4
         FROM theView
END  

视图是这样定义的:

select attr1, attr2, amount, attr4
from db1.theTable
where date >='anyDate'

并且正确插入了值,但是如果以这种方式使用视图:

select attr1, attr2, amount, attr4
from db2.theTable
where date >='anyDate'

显示此消息:

检查身份信息:当前身份值'1252'。
DBCC 执行完成。如果 DBCC 打印错误消息,请联系您的系统管理员。

消息 515,级别 16,状态 2,过程 theSp,第 16 行
无法将值 NULL 插入到列 'amount',表 'db2.dbo.theTable';列不允许空值。插入失败。

注意:db1 和 db2 表的“金额”属性允许为空,但我从不插入空,而是插入 0。

所以我过滤检查金额属性是否为空,我没有得到结果,这意味着金额属性中没有空值。

有谁知道可能的解决方案?

标签: sql-serversql-insert

解决方案


通过查看您发布的错误消息

无法将值 NULL 插入到列 'amount'、表 'db2.dbo.theTable' 中;列不允许空值。插入失败。该语句已终止。

“db2.dbo.theTable”中的列有一个Null值。amount您可以使用ISNULL()来摆脱这个问题。

如果你想查看这些NULL值,你必须使用查询

select * from db2.dbo.theTable where amount IS NULL

看看is Null vs =Null看看为什么您在之前的查询中没有看到那些空记录。


推荐阅读