我有一个第三方程序,可将数据导出到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之后结束了??
有帮助吗?