我有一个使用存储过程填充的表。此存储过程使用一个视图,该视图从另一个数据库调用属性。
为了说明,它类似于:
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值。
有人知道可能的解决方案吗?
答案 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)
有一个记录器可以在出错时验证条件,例如在插入之前打印值