0
我更新後得到了一個觸發器:觸發處理多個更新
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行(S)的影響) (1行(S)的影響) 消息50000,級別16,狀態1,過程tgr_passagier_vlucht 19行 無法更新,乘客被鏈接到航班 消息3609,等級16,狀態1,行16 交易在觸發器中結束。該批次已被中止。
但是,當我運行測試用例例如它說的順序4,3,2,1:
消息50000,級別16,狀態1,過程tgr_passagier_vlucht 19行 無法更新,乘客與航班掛鉤 Msg 3609,Level 16,State 1,Line 6 交易在觸發器中結束。該批次已被中止。
觸發器被虛假測試用例卡住了。這是爲什麼?
您的觸發器中不應該有事務邏輯。如果你的調用代碼有一個交易,那麼這對你的過程會造成嚴重破壞。你應該像你在做的那樣在觸發器中提出一個錯誤。 –