在OneTransaction中批量复制和删除

时间:2009-06-01 09:58:36

标签: c# sql-server ado.net

在C#应用程序中,我喜欢将表数据从一台服务器(SQLServer2000)复制到另一台服务器(SQLServer2005)。我喜欢在单个实例中复制数据并删除SQL Server 2000表中的现有数据。我需要在单个事务中完成所有这些(批量复制和删除)。怎么做到这一点?

注意:我有两个不同的sql server连接如何实现单个事务

3 个答案:

答案 0 :(得分:1)

为了最小化事务的持续时间,我总是通过批量复制到 staging 表(相同的模式,但名称不同 - 没有索引等),然后一旦所有数据都是在服务器上,执行以下操作:

BEGIN TRAN

DELETE FROM FOO

INSERT FOO ...
SELECT ...
FROM FOO_STAGING

COMMIT TRAN

DELETE FROM FOO_STAGING

(事务可以在TSQL中,也可以在通过托管代码连接,或通过TransactionScope; TSQL可以是命令文本,也可以是SPROC)

答案 1 :(得分:0)

您可以使用linked servers执行此操作,但我从未尝试在SQL2005和SQL2000实例之间执行此操作。在SQL2005实例上:

sp_addlinkedserver Sql2000Server --Only need to do this once on the server

BEGIN TRAN

INSERT INTO dbo.MyTable (id, column) 
    SELECT id, column FROM Sql2000Server.MyDatabase.dbo.MyTable
DELETE FROM Sql2000Server.MyDatabase.dbo.MyTable
--etc...

COMMIT TRAN

有关添加/删除链接服务器(http://msdn.microsoft.com/en-us/library/ms190479.aspx

的语法,请参阅Microsoft联机丛书

答案 2 :(得分:0)

除了链接服务器建议之外,您还可以使用SSIS,这是我首选的方法。