T-SQL - неправильный синтаксис рядом с ключевым словом «триггер» и ожидаемый ВНЕШНИЙ ВИД - PullRequest
0 голосов
/ 11 декабря 2019

У меня есть этот (упрощенный) скрипт t-sql:

IF NOT EXISTS (
        SELECT * FROM [__EFMigrationsHistory] WHERE [MigrationId] = N'20191025090642_DbName_v6'
)
BEGIN
    CREATE TRIGGER [dbo].[CREATEID] ON [dbo].[LibNumber]
    INSTEAD OF INSERT
    AS
    BEGIN
        SELECT 1
        -- Some other stuff...
    END 
END;
GO

Я получаю:

Incorrect syntax near the keyword 'TRIGGER'.

И

Incorrect syntax near 'Begin'. Expecting EXTERNAL

Почему я не прав? Похоже, это утверждение ЕСЛИ НЕ СУЩЕСТВУЕТ. Я прав?

1 Ответ

1 голос
/ 11 декабря 2019

К сожалению, вы не можете обрабатывать некоторые сценарии DDL (Create, Alter, Drop) в рабочем процессе DML.

Использование Dynamic SQL - единственный способ справиться с этим.

Вот онообразец:

Declare @SQL as nvarchar(max)
Set @SQL = 
N'CREATE TRIGGER [dbo].[CREATEID] ON [dbo].[LibNumber]
INSTEAD OF INSERT
AS
BEGIN
    SELECT 1
    -- Some other stuff...
END'

IF NOT EXISTS (
        SELECT * FROM [__EFMigrationsHistory] WHERE [MigrationId] = N'20191025090642_DbName_v6'
)
BEGIN
    Exec (@SQL)
END;
GO
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...