Сравните вставленную дату с существующей в триггере - PullRequest
0 голосов
/ 06 января 2019

Мне нужно создать триггер, который будет проверять, есть ли значение в таблице с тем же временем и тем же идентификатором театра

CREATE TRIGGER trCheckSameTime
ON dbo.Poster
FOR INSERT,UPDATE
AS
    IF EXISTS(SELECT P.Id_Poster
              FROM Poster P, inserted I
              WHERE P.Date = I.Date AND P.Id_Theater = I.Id_Theater)
    BEGIN 
        ROLLBACK TRANSACTION
        RAISERROR('There can''t be two spectacles at the same time in the same theater', 16, 10)
    END

Я пытаюсь использовать это, поэтому я хочу, чтобы я ввел

INSERT INTO Poster
VALUES (1,4,1,'20190420 16:00:00')
INSERT INTO Poster
VALUES (1,4,1,'20190420 16:00:00')

Для триггера запрещается это делать, но этот триггер запрещает ввод любых данных в таблицу.

3-е значение в таблице - Theater_id, а 4-е - дата,

1 Ответ

0 голосов
/ 06 января 2019

Вам нужно проверить, прежде чем данные вставлены как

CREATE TRIGGER trCheckSameTime
ON dbo.Poster
INSTEAD OF INSERT, UPDATE
AS
  IF NOT EXISTS(
    SELECT 1
    FROM dbo.Poster P INNER JOIN INSERTED I
         ON P.Id_Theater = I.Id_Theater 
            AND
            P.[Date] = I.[Date]
  )
  BEGIN
    INSERT INTO dbo.Poster(<Columns Here>) 
    SELECT <Columns Here> FROM INSERTED;
  END
    ELSE
      BEGIN
        RAISERROR('There can''t be two spectacles at the same time in the same theater', 16, 10)
      END

Вы также можете создать constraint, который является лучшим решением для вашей проблемы.

ALTER TABLE dbo.Poster
ADD CONSTRAINT <Constraint Name Here> UNIQUE(Id_Theater, [Date]);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...