Невозможно создать триггер для таблицы SQL из-за того, что «указанный тип (типы) событий является недействительным для указанного целевого объекта». - PullRequest
0 голосов
/ 12 июня 2019

Я пытаюсь создать триггер для таблицы и сталкиваюсь с вышеуказанной проблемой как синтаксической ошибкой в ​​SQL-студиях и получаю следующую ошибку при выполнении оператора SQL:

Msg 102,Уровень 15, Состояние 1, Процедура UpdatePo, Строка 9 [Стартовая Строка 18]
Неверный синтаксис рядом с INSERT

Вот триггер, который я пытаюсь создать:

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

CREATE TRIGGER dbo.tiTrigger
ON dbo.TABLE_ONE
AFTER [INSERT]
AS 
    SET NOCOUNT ON;

    DECLARE @po_state VARCHAR(20)
    DECLARE @po_number VARCHAR(255)

    SELECT @po_state = order_state FROM inserted
    SELECT @po_number = po_number FROM inserted

    UPDATE TABLE_TWO
    SET PO_Status = @po_state
    WHERE PO_Number = @po_number
GO

1 Ответ

4 голосов
/ 12 июня 2019

Причина, по которой это не удалось, заключается в том, что вам нужно снять квадратные скобки вокруг INSERT, это не имя объекта.

Однако ваш триггер не работает.У него есть БОЛЬШОЙ логический недостаток, что когда-либо будет вставлена ​​только одна строка.Триггеры в sql server запускаются один раз за операцию.Вы должны переписать это как подход, основанный на множестве.Это простое обновление может и должно быть сделано без каких-либо переменных, просто с помощью простого соединения.

Делать этот набор на основе было бы что-то вроде этого.

CREATE TRIGGER dbo.tiTrigger
   ON  dbo.TABLE_ONE
   AFTER INSERT
AS 
    SET NOCOUNT ON;

    UPDATE t
    set PO_Status = i.order_state
    from TABLE_TWO t
    join inserted i on i.po_number = t.PO_Number
GO
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...