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