触发器处理多个更新

时间:2017-02-23 19:46:08

标签: sql-server sql-server-2008

更新后我有一个触发器:

CREATE TRIGGER tgr_passagier_vlucht
ON Vlucht
AFTER UPDATE
AS
BEGIN
IF @@ROWCOUNT=0
    RETURN
SET NOCOUNT ON
IF EXISTS 
     (SELECT *
     FROM inserted I
     WHERE EXISTS(SELECT * FROM PassagierVoorVlucht P WHERE P.vluchtnummer = I.vluchtnummer))
BEGIN
    ROLLBACK TRANSACTION
    RAISERROR('Cannot update, Passenger is linked to flight ', 16,1)            
END                                                                   
END

我也有一些测试用例:

/*TestCase 1 --------------True*/
UPDATE Vlucht
SET gatecode = 'B'
WHERE vluchtnummer = 5314

/*TestCase 2 --------------True*/
UPDATE Vlucht
SET gatecode = 'A'
WHERE vluchtnummer = 5318

/*TestCase 3 --------------False*/
UPDATE Vlucht
SET gatecode = 'B'
WHERE vluchtnummer = 5316

/*TestCase 4 --------------False*/
UPDATE Vlucht
SET gatecode = 'B'
WHERE vluchtnummer = 5317

如果我按此顺序运行测试,它可以正常工作。我收到了消息:

(受影响的1行) (1排受影响) Msg 50000,Level 16,State 1,Procedure tgr_passagier_vlucht,第19行 无法更新,乘客与航班相关联 消息3609,16级,状态1,第16行 交易在触发器中结束。批次已中止。

但是当我运行4,3,2,1的测试用例时,例如它说:

Msg 50000,Level 16,State 1,Procedure tgr_passagier_vlucht,第19行 无法更新,乘客与航班相关联 Msg 3609,Level 16,State 1,Line 6 交易在触发器中结束。批次已中止。

触发器被假测试案件卡住了。这是为什么?

0 个答案:

没有答案