首页 > 解决方案 > T-SQL - 关键字“触发器”附近的语法不正确,需要外部

问题描述

我有这个(简化的)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

为什么我错了?看起来它是 IF NOT EXISTS 语句。我对吗?

标签: sql-serverdatabasetsql

解决方案


不幸的是,您无法在 DML 工作流程中处理某些 DDL 脚本(创建、更改、删​​除)。

使用动态 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

推荐阅读