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

时间:2009-04-27 15:31:55

标签: sql sql-server sql-server-2005

使用sql Server 2005。 我已经声明了一个触发器,它会在“触发,更新”之后被触发,在这个触发器中我使用WHILE和CURSOR来循环INSERTED表的行。 当我找到一个不满足特定条件的行时:

我希望触发器出现错误,并且不要插入触发触发器的任何行(即使是那些已经满足我条件的行)。 < ---我不知道怎么做!

您能告诉我如何解决错误并阻止插入?

2 个答案:

答案 0 :(得分:10)

使用回滚

IF <some condition>
BEGIN
   RAISERROR ('condition doesn't satisfy something', 16, 1)
   ROLLBACK TRANSACTION
END

答案 1 :(得分:4)

我不确定你在游标循环中做了什么逻辑,但如果可能的话尝试用查询替换游标循环:

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

END

触发器中的光标给我一种不好的感觉:锁定,阻塞和缓慢的想到......