sql-server - 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 语句。我对吗?
解决方案
不幸的是,您无法在 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
推荐阅读
- python - Python BeautifulSoup4 只显示标签但不显示文本
- postgresql - 在 postgres 中执行大规模 JSONB 替换的最有效方法
- github - “kubectl apply”如何验证 docker 镜像的变化?
- python - 一步与多步时间序列预测
- unity3d - Unity 动画层延迟启动
- go - Golang 中的 JSON 数组字符串转换
- python-3.x - 从 GitHub 加载 csv 文件的路径错误
- python-3.x - 在 pyspark 中为 kmeans 创建向量的旋转列的替代方法
- python - 根据对列的操作在熊猫数据框中添加多行
- discord.js - 在 ButtonClick discord.js 上编辑嵌入