创建 SQL 服务器触发器 - 动态 SQL 太长
Create SQL Server trigger - dynamic SQL too long
目前我正在使用 SQL 服务器触发器进行审计跟踪,以识别 table 上的插入、更新和删除。
可以在数据库中动态创建表,因此发生这种情况时我需要动态创建触发器。
因此此时我调用一个存储过程并传入 table 名称。
CREATE PROCEDURE [dbo].[AUDIT_CreateTableTrigger]
@STR_TableName NVARCHAR(MAX)
WITH EXECUTE AS CALLER
AS
BEGIN
DECLARE @STR_Trig NVARCHAR(MAX) = ''
SET @STR_Trig = @STR_Trig + '
CREATE TRIGGER [dbo].[' + @STR_TableName + '_Audit] ON [dbo].[' + @STR_TableName + ']
WITH EXECUTE AS CALLER AFTER
INSERT, UPDATE, DELETE AS
BEGIN
-- do the insert stuff
-- update
-- + delete
END'
EXEC (@STR_Trig) -- then execute the sql
我的问题是我注意到 exec 没有完全阅读声明并中断了程序。
我需要一种方法来执行一长段 SQL 代码(我有一个解决方案,这涉及将动态 SQL 拆分为 3 个触发器,即插入、更新和删除以解决此问题, 但是更愿意保留 1 个触发器来处理所有)
任何建议将不胜感激,谢谢
已解决此问题:打断查询,请参阅下面的解决方案
DECLARE @sql1 NVARCHAR(4000) = '',
@sql2 NVARCHAR(4000) = '',
@sql3 NVARCHAR(MAX)
SET @sql1 += '
CREATE TRIGGER [dbo].[' + @STR_TableName + '_Audit] ON [dbo].[' + @STR_TableName + ']
WITH EXECUTE AS CALLER AFTER
INSERT, UPDATE, DELETE AS
BEGIN
BEGIN TRY
--sql query
'
SET @sql2 = '
--more sql query
END'
SET @sql3 = CAST(@sql1 AS nvarchar(MAX)) + CAST (@sql2 AS nvarchar(MAX))
EXEC sp_executesql @sql3
目前我正在使用 SQL 服务器触发器进行审计跟踪,以识别 table 上的插入、更新和删除。
可以在数据库中动态创建表,因此发生这种情况时我需要动态创建触发器。
因此此时我调用一个存储过程并传入 table 名称。
CREATE PROCEDURE [dbo].[AUDIT_CreateTableTrigger]
@STR_TableName NVARCHAR(MAX)
WITH EXECUTE AS CALLER
AS
BEGIN
DECLARE @STR_Trig NVARCHAR(MAX) = ''
SET @STR_Trig = @STR_Trig + '
CREATE TRIGGER [dbo].[' + @STR_TableName + '_Audit] ON [dbo].[' + @STR_TableName + ']
WITH EXECUTE AS CALLER AFTER
INSERT, UPDATE, DELETE AS
BEGIN
-- do the insert stuff
-- update
-- + delete
END'
EXEC (@STR_Trig) -- then execute the sql
我的问题是我注意到 exec 没有完全阅读声明并中断了程序。
我需要一种方法来执行一长段 SQL 代码(我有一个解决方案,这涉及将动态 SQL 拆分为 3 个触发器,即插入、更新和删除以解决此问题, 但是更愿意保留 1 个触发器来处理所有)
任何建议将不胜感激,谢谢
已解决此问题:打断查询,请参阅下面的解决方案
DECLARE @sql1 NVARCHAR(4000) = '',
@sql2 NVARCHAR(4000) = '',
@sql3 NVARCHAR(MAX)
SET @sql1 += '
CREATE TRIGGER [dbo].[' + @STR_TableName + '_Audit] ON [dbo].[' + @STR_TableName + ']
WITH EXECUTE AS CALLER AFTER
INSERT, UPDATE, DELETE AS
BEGIN
BEGIN TRY
--sql query
'
SET @sql2 = '
--more sql query
END'
SET @sql3 = CAST(@sql1 AS nvarchar(MAX)) + CAST (@sql2 AS nvarchar(MAX))
EXEC sp_executesql @sql3