2009-06-01 6 views
1

In C# -Anwendung möchte ich die Tabellendaten von einem Server (SQLServer2000) auf einen anderen Server (SQLServer2005) kopieren. Ich möchte die Daten in Einzelinstanz kopieren und die vorhandenen Daten in der SQL Server 2000-Tabelle löschen. Ich muss all dies tun (Massenkopieren und Löschen) in einer einzigen Transaktion. Wie erreiche ich das?Massenkopieren und Löschen in OneTransaction

Anmerkung: Ich habe zwei verschiedene SQL Server-Verbindungen, wie dies für

Antwort

1

einzige Transaktion zu erreichen, um die Dauer der Transaktion zu minimieren, ich tue dies immer von bulk-Kopieren auf eine Staging Tabelle (gleiches Schema , aber verschiedene Namen - keine Indizes usw.) und dann einmal alle Daten auf dem Server vorhanden sind, so etwas wie:

BEGIN TRAN 

DELETE FROM FOO 

INSERT FOO ... 
SELECT ... 
FROM FOO_STAGING 

COMMIT TRAN 

DELETE FROM FOO_STAGING 

(die Transaktion könnte entweder in den TSQL oder auf die Verbindung über verwalteten Code sein, oder via TransactionScope, der TSQL könnte entweder als Befehlstext oder als SPRO sein C)

+0

Beachten Sie, dass diese Lösung einen Schnappschuss transaktional erhält, aber den Lesevorgang nicht in derselben Transaktion speichert. Dies ist fast sicher gut für alle Benutzer und ist den großen Perf Vorteil wert, aber es ist erwähnenswert. Die Verwendung einer Datenbank mit Snapshot-Versionierung sollte sogar dieses Problem für die einfache naive Lösung entfernen – ShuggyCoUk

0

Sie können dies mit tun, obwohl ich nie versucht habe, dies zwischen einer SQL2005 und einer SQL2000-Instanz zu tun. Auf dem SQL2005 Beispiel:

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 

Siehe Microsoft Bücher online für die Syntax zum Hinzufügen/Entfernen verknüpfte Server (http://msdn.microsoft.com/en-us/library/ms190479.aspx)

0

Im Anschluss an den Server-Vorschlag verbunden sind, können Sie SSIS verwenden als auch, was wäre mein bevorzugte Methode.