При создании сценария SQL для создания триггера в таблице я хотел убедиться, что триггер еще не существует, прежде чем я его создам. В противном случае сценарий не может быть запущен несколько раз.
Поэтому я добавил инструкцию, чтобы сначала проверить, существует ли триггер. После добавления этого оператора оператор CREATE TRIGGER больше не работает.
IF NOT EXISTS (SELECT name FROM sysobjects
WHERE name = 'tr_MyTable1_INSERT' AND type = 'TR')
BEGIN
CREATE TRIGGER tr_MyTable1_INSERT
ON MyTable1
AFTER INSERT
AS
BEGIN
...
END
END
GO
Это дает:
Msg 156, Level 15, State 1, Line 5
Incorrect syntax near the keyword 'TRIGGER'.
Решением было бы отбросить существующий триггер и затем создать новый:
IF EXISTS (SELECT name FROM sysobjects
WHERE name = 'tr_MyTable1_INSERT' AND type = 'TR')
DROP TRIGGER tr_MyTable1_INSERT
GO
CREATE TRIGGER tr_MyTable1_INSERT
ON MyTable1
AFTER INSERT
AS
BEGIN
...
END
GO
Мой вопрос : почему первый пример не работает? Что плохого в проверке наличия триггера?