【发布时间】:2009-06-01 09:58:35
【问题描述】:
在 C# 应用程序中,我喜欢将表数据从一台服务器 (SQLServer2000) 复制到另一台服务器 (SQLServer2005)。我喜欢复制单个实例中的数据并删除 SQL Server 2000 表中的现有数据。我需要在单个事务中完成所有这些(批量复制和删除)。如何做到这一点?
注意:我有两个不同的 sql server 连接,如何为单个事务实现此功能
【问题讨论】:
标签: c# sql-server ado.net
在 C# 应用程序中,我喜欢将表数据从一台服务器 (SQLServer2000) 复制到另一台服务器 (SQLServer2005)。我喜欢复制单个实例中的数据并删除 SQL Server 2000 表中的现有数据。我需要在单个事务中完成所有这些(批量复制和删除)。如何做到这一点?
注意:我有两个不同的 sql server 连接,如何为单个事务实现此功能
【问题讨论】:
标签: c# sql-server ado.net
为了最小化事务的持续时间,我总是通过批量复制到一个 staging 表(相同的架构,但不同的名称 - 没有索引等),然后一旦所有数据都在服务器上,执行以下操作:
BEGIN TRAN
DELETE FROM FOO
INSERT FOO ...
SELECT ...
FROM FOO_STAGING
COMMIT TRAN
DELETE FROM FOO_STAGING
(事务可以在 TSQL 中或通过托管代码或通过TransactionScope 的连接上;TSQL 可以作为命令文本或作为 SPROC)
【讨论】:
您可以使用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
有关添加/删除链接服务器的语法,请参阅 Microsoft 在线书籍 (http://msdn.microsoft.com/en-us/library/ms190479.aspx)
【讨论】:
除了链接服务器的建议,您也可以使用 SSIS,这将是我的首选方法。
【讨论】: