无法将“ NULL”值插入SQL Server列

时间:2019-05-13 21:56:29

标签: sql-server sql-insert

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

为了说明,它类似于:

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条消息,状态2,状态16,theSp,第16行
  无法将值NULL插入表'db2.dbo.theTable'的列'amount'中;列不允许为空。 INSERT失败。

注意:db1和db2表的'amount'属性允许为null,但我从不插入null,而是插入0。

所以我进行了过滤以检查amount属性是否为null且没有得到结果,这意味着amount属性中没有null值。

有人知道可能的解决方案吗?

2 个答案:

答案 0 :(得分:0)

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

  

无法将值NULL插入表'db2.dbo.theTable'的列'amount'中;列不允许为空。 INSERT失败。该声明已终止。

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

如果要查看NULL值,则必须使用

这样的查询

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

看看is Null vs =Null,了解为什么在上一个查询中没有看到这些空记录。

答案 1 :(得分:0)

有一个记录器可以在出错时验证条件,例如在插入之前打印值