SQL Server 触发器:在区分大小写的数据库中"插入"了无效的对象名称



我有一个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。

最新更新