创建 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