删除触发器的替代方法,用于跟踪已删除的记录

我有一项任务是创建一个大型数据复制服务来配置我们的数据仓库。源数据库驻留在其他服务器上。 到目前为止,我已经能够使用SqlBulkCopy类和TSql Excepts语句的结合将Update和Insert项实现到仓库中。 我现在的问题是处理记录删除。我唯一能想到的处理删除的方法是在表上创建一个自定义触发器,将已删除的记录插入到我的服务可以读取的临时表中,然后从仓库中删除。 我知道有很多数据复制工具,但公司想要一个定制的内部服务。 请注意,将要配置的一些表格超过1亿条记录。 有什么建议?     
已邀请:
我不认为删除触发器会那么糟糕。 1亿条记录绝对是一个很好的组块,但是你在服务器上运行触发器,SQL可以优化执行路径。 如果您在客户端执行其他操作,则会产生从服务器获取记录然后向仓库发出删除命令的开销。 什么是关于困扰你的触发器?     
从我正在阅读的内容来看,你正试图重新发明复制(http://msdn.microsoft.com/en-us/library/ms151198.aspx)。那总结一下吗?如果是这样,我的建议是不会。     
SQL Server具有内置的更改跟踪(至少在2008 R2中,我不确定何时引入了此功能)。在这里阅读更多内容:http://msdn.microsoft.com/en-us/library/cc280462.aspx     
我可能不完全理解你在做什么但是在SQL Server中你可以捕获用output子句删除的行。也许这是你可以使用的东西。
-- Table to delete from
declare @T table (id int, name varchar(50))

-- Table to capture the deleted rows
declare @DeletedRows table (id int, name varchar(50))

-- Dummy data
insert into @T values
(1, 'Name1'),
(2, 'Name2'),
(3, 'Name3'),
(4, 'Name4'),
(5, 'Name5')

-- Delete every other row
delete from @T
output deleted.id, deleted.name into @DeletedRows
where id % 2 = 0

select *
from @DeletedRows
结果 - 已删除的行
id          name
----------- --------------------------------------------------
2           Name2
4           Name4
    
我有很好的经验使用触发器将记录ID插入到临时表中。然后,我们创建了一组SSIS包,SQL Agent作业轮询登台表,并根据登台表的内容采取适当的操作。这使得实现自定义成为可能。由于我们在OLTP系统和仓库之间移动数据,因此它很有意义 - 记录并不总是按行排列。     

要回复问题请先登录注册