SQL Server-DDL触发器在创建表后修改表

时间:2018-07-05 09:03:52

标签: sql sql-server triggers database-trigger

我有一个第三方程序,可将数据导出到SQL Server。 但是,此类程序无法插入,但是每次处理时都会使用数据删除并重新创建每个表。

有一个特定的架构。 每次重新创建SQL时,我都需要对此类表进行修改。

我一直在尝试在Create上使用DDL触发器,如果​​它在目标模式中,它只会将表的名称写入LOG:

      CREATE TRIGGER [tCREATE_TABLE] ON DATABASE 
                FOR CREATE_TABLE
            AS     
            DECLARE @data XML;
            DECLARE @schema sysname;
            DECLARE @schema_s nvarchar(128);
            DECLARE @object sysname;
            DECLARE @object_s nvarchar(128);
            DECLARE @eventType sysname;    
            SET @data = EVENTDATA();
            SET @eventType = @data.value('(/EVENT_INSTANCE/EventType)[1]',
                                         'sysname');    
            SET @schema    = @data.value('(/EVENT_INSTANCE/SchemaName)[1]','sysname');
            SET @schema_s = CAST(@schema as nvarchar(128));
            SET @object    = @data.value('(/EVENT_INSTANCE/ObjectName)[1]','sysname');
            SET @object_s = CAST(@object as nvarchar(128));   

    -- COMMIT should unlock the table...??
    COMMIT

            IF @schema_s = 'TARGET_SCHEMA'  
                INSERT INTO [TARGET_SCHEMA].[UpdateLOG](TabName,LOAD_UPDATEDATE,LOAD_USER)
                VALUES (@object_s,GETDATE(),CURRENT_USER)
      -- this is the procedure that modifies the target table
        EXEC [ProcessTableProcedure]
              @targettab = @object_s
            GO

这可用于写入日志,但是一旦我添加调用处理程序,它将返回错误。

在触发器的末尾,由于尚未提交事务,因此修改过程将找不到该表。

在此之前,我已经提交了COMMIT,但是随后什么也没发生(过程未运行)。 我认为触发器在COMMIT之后结束了??

有帮助吗?

0 个答案:

没有答案