假设您没有针对源表的更新或删除,则可以尝试以下操作:
1.使用CTAS语法(对于SQLServer是SELECT * into source_table_copy FROM source_table
)复制现有表。即使对于大桌子,这种操作也非常快。
2. after insert
在source_table
将新记录复制到的触发器上添加source_table_copy
。
3.现在,当所有新记录都source_table
进入时source_table_copy
,您可以将数据从复制的表批量移至Mysql。例如,如果您有2个服务器之间的链接,则可以在TSQL存储过程的主体内完成所有操作。
例如,一段代码最多可将20条记录移至新服务器
--declare table variable to keep deleted records until they delivered to target host
BEGIN TRANSACTION;
DELETE TOP (20) FROM source_table_copy OUTPUT DELETED.* INTO @Table_Var;
--insert data into linked server , or to csv file
COMMIT;
也可以使用CURSOR读取数据,然后删除with where current of
子句。
**理想情况下,您需要防止应用程序source_table
在步骤1期间向其中插入数据。如果绝对不可能,我将使用一个after insert
触发器,该触发器在步骤1之前添加,并在完成后立即删除,该触发器将数据复制到其他表中后来与合并source_table_copy
。