我有一個觸發器:觸發處理多個刀片
CREATE TRIGGER tgr_incheck_vlucht
ON PassagierVoorVlucht
AFTER INSERT, UPDATE
AS
BEGIN
IF @@ROWCOUNT= 0 BEGIN RETURN END
SET NOCOUNT ON
BEGIN TRY
IF EXISTS
(SELECT *
FROM inserted I
WHERE EXISTS(SELECT *
FROM PassagierVoorVlucht P inner join Vlucht V on P.vluchtnummer = V.vluchtnummer
WHERE I.inchecktijdstip >= vertrektijdstip))
BEGIN
RAISERROR('Inchecktijdstip moet voor de aankomsttijdliggen', 16,1)
END
END TRY
BEGIN CATCH
IF @@TRANCOUNT > 0 BEGIN ROLLBACK TRANSACTION END
DECLARE @ErrorMessage NVARCHAR(4000) = ERROR_MESSAGE(),
@errorSeverity INT = ERROR_SEVERITY(),
@errorState INT = ERROR_STATE()
RAISERROR (@ErrorMessage, @errorSeverity, @errorState)
END CATCH
END
現在我已經寫了一些測試語句:
INSERT INTO PassagierVoorVlucht
VALUES(850, 5316, 1, '2002-01-01 13:37:00.000', 21),
(1002, 5316, 1, '2004-01-01 13:37:00.000', 21),
(1601, 5316, 1, '2004-05-01 13:37:00.000', 21),
(1602, 5316, 1, '2004-05-01 13:37:00.000', 21)
觸發當時的工作只有一個插入的行不是爲整個街區。我如何編寫可以處理多個插入的觸發器?
你是什麼意思「處理多個插入」?你想讓錯誤提出四次嗎? –
不,前兩個插入值行是好的,必須插入,最後兩個插入值的行都是假的,必須回退。但現在它沒有插入任何東西。我希望你能理解它。 – Yakalent
好吧,你正在檢查是否有*行違反了你的商業邏輯,並且回滾了所有的東西。你可能會考慮一個'INSTEAD OF'插入觸發器,你可以在其中插入*不違反業務邏輯的行。 –