使用sql Server 2005。 我已经声明了一个触发器,它会在“触发,更新”之后被触发,在这个触发器中我使用WHILE和CURSOR来循环INSERTED表的行。 当我找到一个不满足特定条件的行时:
我希望触发器出现错误,并且不要插入触发触发器的任何行(即使是那些已经满足我条件的行)。 < ---我不知道怎么做!
您能告诉我如何解决错误并阻止插入?
答案 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
触发器中的光标给我一种不好的感觉:锁定,阻塞和缓慢的想到......