我有一个SQL Server INSTEAD OF 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
动态SQL创建一个新的"上下文",其中调用代码块中的变量和表可能不可用。
inserted
不可用一点也不奇怪。简单的解决方案是不使用动态SQL:
INSERT INTO Personnel (AutoID, Firstname, Surname)
SELECT CAST(@NewID AS nvarchar(255)), Firstname, Surname
FROM inserted;
还要注意,无论何时使用字符类型,应该始终使用长度。默认长度因上下文而异。当它不够长时,你的代码就会有难以发现的bug。