当我运行以下代码时,它会运行并完美地打印SQL输出。
但是,上一个EXEC
语句会抛出错误
关键字' 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
答案 0 :(得分:2)
要执行的SQL命令必须是单个批处理。因此,您无法使用GO
。
您最好声明一个CURSOR
并为每个表执行脚本。