我有一个Server INSTEAD OF INSERT
触发器,用于填充表中的值。但是,当我运行一个insert语句时,我得到的错误是
无效的对象名称‘插入’
现在,我的数据库排序规则被设置为区分大小写,所以我不确定“插入”的大小写是否是原因,但我尝试过插入、插入和插入。
我的扳机看起来像是:
CREATE TRIGGER UpdateID
ON Personnel
INSTEAD OF INSERT
AS
BEGIN
DECLARE @SQL nvarchar(4000)
DECLARE @NewID int = 100 --Will be auto generated
SET @SQL = 'INSERT INTO Personnel (AutoID, Firstname, Surname)
SELECT ' + CAST(@NewID AS nvarchar) + ', Firstname, Surname
FROM inserted'
EXECUTE (@SQL)
END
发布于 2016-11-07 12:16:57
动态SQL创建一个新的“上下文”,其中调用代码块中的变量和表可能不可用。
inserted
不可用一点也不奇怪。简单的解决方案是不使用动态SQL:
INSERT INTO Personnel (AutoID, Firstname, Surname)
SELECT CAST(@NewID AS nvarchar(255)), Firstname, Surname
FROM inserted;
还请注意,无论何时使用字符类型,都应该使用长度。默认长度随上下文而变化。当它不够长时,您的代码就会有很难找到的bug。
https://stackoverflow.com/questions/40464905
复制相似问题