首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Server触发器:在区分大小写的数据库中,无效的对象名“插入”

Server触发器:在区分大小写的数据库中,无效的对象名“插入”
EN

Stack Overflow用户
提问于 2016-11-07 12:11:36
回答 1查看 4.6K关注 0票数 1

我有一个Server INSTEAD OF INSERT触发器,用于填充表中的值。但是,当我运行一个insert语句时,我得到的错误是

无效的对象名称‘插入’

现在,我的数据库排序规则被设置为区分大小写,所以我不确定“插入”的大小写是否是原因,但我尝试过插入、插入和插入。

我的扳机看起来像是:

代码语言:javascript
复制
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
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-11-07 12:16:57

动态SQL创建一个新的“上下文”,其中调用代码块中的变量和表可能不可用。

inserted不可用一点也不奇怪。简单的解决方案是不使用动态SQL:

代码语言:javascript
复制
INSERT INTO Personnel (AutoID, Firstname, Surname)
    SELECT CAST(@NewID AS nvarchar(255)), Firstname, Surname
    FROM inserted; 

还请注意,无论何时使用字符类型,都应该使用长度。默认长度随上下文而变化。当它不够长时,您的代码就会有很难找到的bug。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40464905

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档