Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/76.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_Sql Server 2005 - Fatal编程技术网

Sql 如何中止触发器中多行的插入

Sql 如何中止触发器中多行的插入,sql,sql-server,sql-server-2005,Sql,Sql Server,Sql Server 2005,使用SQLServer2005。 我声明了一个触发器,该触发器在“插入后,更新”时被触发,在此触发器中,我使用WHILE和游标在插入表的行上循环。 当我发现一行不符合特定条件时: 我希望触发器引发错误,并且不插入触发触发器的任何行(即使是那些已经满足我的条件的行) 使用回滚 IF <some condition> BEGIN RAISERROR ('condition doesn't satisfy something', 16, 1) ROLLBACK TRANSACT

使用SQLServer2005。 我声明了一个触发器,该触发器在“插入后,更新”时被触发,在此触发器中,我使用WHILE和游标在插入表的行上循环。 当我发现一行不符合特定条件时:

我希望触发器引发错误,并且不插入触发触发器的任何行(即使是那些已经满足我的条件的行) 使用回滚

IF <some condition>
BEGIN
   RAISERROR ('condition doesn't satisfy something', 16, 1)
   ROLLBACK TRANSACTION
END
IF
开始
RAISERROR('条件不满足某些条件',16,1)
回滚事务
结束

我不确定您在该游标循环中执行的逻辑,但是如果可能,请尝试用查询替换游标循环:

if exists (select PK from INSERTED where .....)
BEGIN
    --from @SQLMenace's answer
    RAISERROR ('condition doesn't satisfy something', 16, 1)
    ROLLBACK TRANSACTION

END

触发器中的游标给了我一种不好的感觉:我想到了锁定、阻塞和缓慢…

同意,我现在正在处理由调用存储过程的触发器中的游标循环引起的生产问题。我们通过修复索引使问题变得不那么严重,但唯一真正的解决办法似乎就是不在触发器中循环。