T-SQL触发器,用于检查是否采用了飞机座椅

时间:2015-05-09 15:27:49

标签: sql-server triggers

我需要制作一个触发器,检查在将客户插入表格之前是否已经取得飞机座位。

到目前为止,我有以下触发器:

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,因为在飞行前几天​​才知道座位号

1 个答案:

答案 0 :(得分:1)

如果表上有唯一标识符,则可以将其加入EXISTS()查询以过滤掉任何尝试插入的记录。

下面的小提琴这个例子,虽然它假设你正在处理你需要的空处理。

http://sqlfiddle.com/#!6/93a8a

private int _x;

public int X{
    get { return _x; }
 }