更新后我有一个触发器:
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 交易在触发器中结束。批次已中止。
触发器被假测试案件卡住了。这是为什么?