2009-06-01 5 views
1

Dans l'application C#, j'aime copier les données de table d'un serveur (SQLServer2000) vers un autre serveur (SQLServer2005). J'aime copier les données dans une seule instance et supprimer les données existantes dans la table SQL Server 2000. J'ai besoin de faire tout cela (copie en bloc et suppression) en une seule transaction. Comment y parvenir?Copie en bloc et suppression dans OneTransaction

Note: J'ai deux différentes connexions serveur sql comment y parvenir pour la transaction unique

Répondre

1

Afin de minimiser la durée de l'opération, je fais toujours cela en vrac copie à une mise en scène table (même schéma , mais un nom différent - pas d'index, etc.), puis une fois que toutes les données sur le serveur, faire quelque chose comme:

BEGIN TRAN 

DELETE FROM FOO 

INSERT FOO ... 
SELECT ... 
FROM FOO_STAGING 

COMMIT TRAN 

DELETE FROM FOO_STAGING 

(la transaction pourrait être soit dans le TSQL ou sur la connexion via le code managé, ou via le TransactionScope, le TSQL peut être soit en tant que texte de commande, soit en tant que SPRO C)

+0

Notez que cette solution vous procure un instantané transactionnel mais ne conserve pas la lecture dans la même transaction. C'est presque certainement très bien pour tous les utilisateurs et vaut le grand avantage de la perf, mais il vaut la peine de le noter. L'utilisation d'une base de données avec versionnage de snapshot devrait supprimer même ce problème pour la solution naïve simple – ShuggyCoUk

0

Vous pouvez le faire en utilisant linked servers, bien que je n'ai jamais essayé de le faire entre une instance SQL2005 et une instance SQL2000. Sur votre instance 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 

Voir les livres de Microsoft en ligne pour la syntaxe pour ajouter/supprimer des serveurs liés (http://msdn.microsoft.com/en-us/library/ms190479.aspx)

0

Suite à la suggestion du serveur lié, vous pouvez utiliser SSIS aussi bien, ce qui serait mon méthode préférée.

Questions connexes