我有一个SQL Server INSTEAD OF INSERT
触发器,用于填充表格中的值。但是当我运行一个insert语句时,我得到了错误
无效的对象名称'inserted'
现在我的数据库排序规则设置为区分大小写,所以我不确定'inserted'的情况是否是原因,但我尝试过插入,插入和插入。
我的触发器看起来像:
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
答案 0 :(得分:4)
动态SQL会创建一个新的“上下文”,其中调用代码块中的变量和表可能不可用。
inserted
不可用并不奇怪。简单的解决方案是不使用动态SQL:
INSERT INTO Personnel (AutoID, Firstname, Surname)
SELECT CAST(@NewID AS nvarchar(255)), Firstname, Surname
FROM inserted;
另请注意,无论何时使用字符类型,都应始终使用长度。默认长度因上下文而异。如果时间不够长,那么您的代码将难以找到错误。