我需要制作一个触发器,检查在将客户插入表格之前是否已经取得飞机座位。
到目前为止,我有以下触发器:
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
我遇到的问题是触发器检查座位是否在插入完成后被取走,因此无论如何都会一直占用座位。
是否有某种方法可以在插入完成之前检查座椅是否已被拿走?
编辑:还必须可以在座位上输入NULL,因为在飞行前几天才知道座位号
答案 0 :(得分:1)
如果表上有唯一标识符,则可以将其加入EXISTS()查询以过滤掉任何尝试插入的记录。
下面的小提琴这个例子,虽然它假设你正在处理你需要的空处理。
http://sqlfiddle.com/#!6/93a8a
private int _x;
public int X{
get { return _x; }
}