Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 触发器和标识插入处于关闭状态时出现问题_Sql_Sql Server_Triggers - Fatal编程技术网

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插入并执行“非相关”操作?这样你的插入仍然会发生,你可以做任何其他你需要做的事情。