2009-06-01 86 views
1

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

注:我有两个不同的SQL Server连接如何实现这一单交易

回答

1

为了减少交易的时间,我总是这样做被整体复制到分期表(同模式但不同的名字 - 没有索引等),然后一旦所有数据都在服务器上,这样做:

BEGIN TRAN 

DELETE FROM FOO 

INSERT FOO ... 
SELECT ... 
FROM FOO_STAGING 

COMMIT TRAN 

DELETE FROM FOO_STAGING 

(该交易可能是无论是在TSQL或通过托管代码的连接,或通过TransactionScope; TSQL可以是命令文本,也可以是SPRO C)

+0

请注意,此解决方案可以事务性地为您提供快照,但不会将读取保留在同一个事务中。这对于所有用户来说几乎肯定是很好的,并且值得大型性能优势,但值得注意。 使用具有快照版本控制的数据库应该可以消除简单幼稚解决方案的问题 – ShuggyCoUk 2009-06-01 13:02:00

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 

请参阅Microsoft联机丛书语法添加/删除链接服务器(http://msdn.microsoft.com/en-us/library/ms190479.aspx

0

而且链接服务器的建议,您可以使用SSIS为好,这将是我的首选方法。