我有一个第三方程序,它将数据导出到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后触发器结束......?
有帮助吗?