1
我需要製作一個觸發器來檢查客戶是否可以插入表格之前是否需要飛機座椅。T-SQL觸發器檢查飛機座位是否被採用
我有以下觸發至今:
CREATE TRIGGER CheckIfSeatIsUnique
ON PassagierVoorVlucht
AFTER insert, update
AS
BEGIN
IF @@ROWCOUNT = 0 RETURN
SET NOCOUNT ON
BEGIN TRY
IF EXISTS (SELECT 1 FROM PassagierVoorVlucht P Join inserted I on P.vluchtnummer=i.vluchtnummer Where P.stoel = I.stoel)
BEGIN
RAISERROR('The chosen seat is taken', 16, 1)
END
END TRY
BEGIN CATCH
IF @@TRANCOUNT > 0
ROLLBACK TRANSACTION
DECLARE @ErrorMessage NVARCHAR(4000) = ERROR_MESSAGE()
DECLARE @ErrorSeverity INT = ERROR_SEVERITY()
DECLARE @ErrorState INT = ERROR_STATE()
RAISERROR (@ErrorMessage, @ErrorSeverity, @ErrorState)
END CATCH
END
我的問題是,如果座位已插入AFTER觸發器檢查已完成,因此,座位總是會不管採取。
有沒有辦法在插入完成之前檢查座位是否被佔用?
編輯:它還必須能夠在座位輸入NULL,因爲seatnumber不知道,直到幾天飛行
將創建'vluchtnummer唯一約束,stoel' –
使用'而不是of'而不是'after'。 –
我不能使用唯一的約束,因爲列stoel也可以爲null。 我也嘗試創建一個而不是,但然後我得到錯誤'不能創建而不是更新觸發器,這是因爲表具有級聯更新的外鍵' – FearReaper