Sql 触发器和标识插入处于关闭状态时出现问题
在使用触发器向表中添加数据之前,我尝试执行一个过程。以前我可以执行所有的过程,但是当我想将新数据添加到表中时,我会得到一个Sql 触发器和标识插入处于关闭状态时出现问题,sql,sql-server,triggers,Sql,Sql Server,Triggers,在使用触发器向表中添加数据之前,我尝试执行一个过程。以前我可以执行所有的过程,但是当我想将新数据添加到表中时,我会得到一个IDENTITY\u INSERT关闭的错误。我尝试在不同的位置打开它,但插入的触发器表似乎不存在: ALTER TRIGGER tr_remove_new_agent ON XQIAgent INSTEAD OF INSERT AS /*SET IDENTITY_INSERT dbo.XQIAgent ON -This does not seem to work here
IDENTITY\u INSERT关闭的错误。我尝试在不同的位置打开它,但插入的触发器表似乎不存在:
ALTER TRIGGER tr_remove_new_agent ON XQIAgent INSTEAD OF INSERT AS
/*SET IDENTITY_INSERT dbo.XQIAgent ON -This does not seem to work here */
/*Do something non related here */
INSERT INTO XQIAgent SELECT * FROM inserted /* This step does not play nicely */
go严格回答:您不能执行简单的插入到。。。在“标识插入”设置为“开”的情况下,从查询中选择*。生成的错误解释了它需要显式的列定义,无论在何处插入(特殊查询、存储过程、触发器),都是如此。将INSERT更改为显式覆盖除标识之外的所有列,并将SELECT更改为在其中包含相同的列。inserted
表将不会在而不是触发器中为列指定标识值,因此在此处使用IDENTITY\u INSERT
是没有意义的。在insert语句中指定一个显式列列表,并按照@Dave Brown的建议省略标识列,相关错误将消失。此外,在触发器中设置identity\u insert
,会带来安全问题,因为需要使用alter table权限来设置/重置它。为什么不简化此操作并更改为AFTER插入并执行“非相关”操作?这样你的插入仍然会发生,你可以做任何其他你需要做的事情。