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

时间:2015-02-13 13:46:51

标签: sql sql-server triggers

当我运行以下代码时,它会运行并完美地打印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

1 个答案:

答案 0 :(得分:2)

要执行的SQL命令必须是单个批处理。因此,您无法使用GO

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