1

Je suis dans une situation où j'ai besoin de créer une copie partielle d'une base de données à partir d'un SQL Server distant (2005/2008 Express Edition) et de le stocker dans une base de données SQL Server locale (2005/2008 Express Edition). La copie locale aura la même définition de schéma, mais ne contiendra que des parties des données de la base de données distante.Comment faire une copie partielle d'une base de données SQL Server Express distante vers une base de données SQL Server Express locale?

La base de données locale doit donner un nom unique avec des paramètres à partir du code C#, semblable à

TodaysDate_SerialNumber_MachineNumber_DatabaseName  
e.g. 20100622_1_3_DatabaseName 

(Ne vous laissez pas prendre avec le schéma de nommage, il n'a pas encore été décidé.)

Je travaille en C# sur .net 3.5 en utilisant VS2010. Jusqu'à présent, je pensais exécuter le script de création de la base de données sur le serveur SQL local à partir du code C#, puis copier les données de la base de données distante dans la base de données locale, filtrée sur ce dont j'avais réellement besoin. Les opérations doivent être démarrées à partir du code C#, mais ne doivent pas forcément être toutes du code C#. Mais je n'ai pas encore décidé. Selon vous, quelle serait la meilleure option pour faire ce que je veux faire?

(BTW, si je suis pas clair, laissez-moi savoir et je vais essayer de mettre à jour la question avec plus d'informations.)

Répondre

1

SqlBulkCopy est probablement votre meilleur pari si vous faites cela tout à fait dans le code .

Vous aurez des connexions sql à chacune de vos bases de données, puis une instruction select à exécuter sur votre base de données source qui insérera des lignes dans une base de données/table de destination.

+0

Sans avoir étudié à fond, j'aime votre suggestion le plus sur les 3 que j'ai vu jusqu'ici. Je ferai des recherches et des expériences demain, et je marquerai la réponse qui m'a été la plus utile. –

+1

Après avoir été dérouté, je me suis maintenant débrouillé pour ça. SqlBulkCopy a bien fonctionné pour moi. J'interroge la base de données pour toutes les tables qu'il contient, puis pour chaque table, j'interroge les colonnes, puis je génère une instruction Select qui sélectionne toutes les colonnes de la table. Je crée ensuite un SqlDataReader que je donne à l'objet SqlBulkCopy, et voilà! Je l'utilise pour faire une copie exacte des données dans la base de données vers une autre base de données avec les mêmes tables et schémas. J'utilise le SqlBulkCopyOptions.KeepIdentity pour m'assurer que mes relations FK restent valides. Donc merci @PaulG pour avoir suggéré la classe SqlBulkCopy. =) –

1

La réponse à cela dépend vraiment de ce que vous êtes le plus à l'aise.

Je voudrais probablement mettre en place un serveur lié sur le SQL Express local et écrire un seul script SQL pour faire le tout. Il pourrait signaler des progrès revenir à l'application C# en utilisant RAISERROR ... WITH NOWAIT et ces messages peuvent être traités de manière asynchrone par la mise en place d'un SqlInfoMessageEventHandler

+0

Je suis plus à l'aise d'utiliser C#, bien que je devrais être capable de créer un script SQL comme vous le suggérez. Je vais faire quelques tests pour voir ce qui fonctionne le mieux. Je n'ai aucune expérience avec les serveurs liés, donc je dois regarder dans cela. Connaissez-vous de bons articles qui expliquent les serveurs liés? Et une question importante: Le serveur lié fonctionne-t-il entre deux instances SQL Server Express? –

+0

@ Sub-Star Les serveurs liés Yes fonctionnent sur SQL Express. Je peux voir les avantages et les inconvénients d'une solution C# et d'une solution SQL. Le C# peut être un peu moins efficace car votre application orchestre chaque étape, mais des choses comme la gestion des erreurs peuvent être plus faciles en C#. –

1

Peut-être que vous pouvez créer une sauvegarde de la base de données, le télécharger au machiene local, y créer un nouveau vide base de données et restaurer la sauvegarde dans la base de données vide avec l'option "override". Après cela, vous pouvez supprimer les enregistrements que vous ne voulez pas "copier".

Vous pouvez utiliser Microsoft SQL Management Studio pour créer les scripts de sauvegarde et de restauration.

Questions connexes