SQL: Почему перед CREATE TRIGGER должен стоять GO

При создании сценария 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

Мой вопрос : почему первый пример не работает? Что плохого в проверке наличия триггера?

7
задан demoncodemonkey 31 January 2012 в 17:43
поделиться