从变量创建 SQL 服务器触发器不起作用

Creating a SQL Server trigger from a variable doesn't work

当我 运行 下面的代码时,它会 运行 并完美打印 SQL 输出。

但是最后一个 EXEC 语句抛出错误

Incorrect syntax near the keyword 'TRIGGER'

代码基本上将一些 SQL 串在一起,为所有现有表创建触发器。

当我在最后手动获取 PRINT 输出并在 SSMS 中执行它时它工作正常,但代码中的 EXEC 不会 运行 它。

DECLARE @sql AS NVARCHAR(MAX)
SET @sql = ''

SELECT @sql = @sql + 'CREATE TRIGGER [tr_' + table_name +'] ON 
[' + table_schema + '].[' + table_name + '] FOR INSERT, UPDATE, DELETE AS
SELECT 1 GO' + CHAR(13) + CHAR(10)
FROM INFORMATION_SCHEMA.TABLES
WHERE table_type = 'BASE TABLE'

PRINT @sql; -- output is correct and I can paste this and it works
EXEC sp_executesql @sql -- doesn't work

要执行的SQL 命令必须是单个批处理。所以,你不能使用 GO.

您最好声明一个 CURSOR 并为每个 table 执行脚本。