2011-09-21 4 views
1

Est-il possible de copier et de créer une base de données existante, ou de générer le SQL, puis de l'exécuter sur une base de données SQL pour créer une copie d'une base de données existante?Recréer une base de données SQL Server existante par programmation?

Je ne me soucie pas des données, juste du schéma.

Je veux faire cela pour les tests unitaires. Je sais que je peux juste utiliser sqlite, mais je suis curieux de savoir comment cela fonctionnerait de toute façon.

Je n'ai aucune procs stockées ou quoi que ce soit, simplement des tables et des PK/FK etc.

Je pense que la meilleure approche serait en quelque sorte de générer le schéma SQL, puis exécutez simplement contre la base de données.

Ou, si c'est plus facile, copiez la base de données, puis tronquez les tables.

Note: Je veux savoir comment cela peut être fait par programmation.

+0

http: //blog.sqlauthority.com/2007/08/21/sql-server-2005-create-script-à-copier-base de données-schéma-et-tous-les-objets-stockés-procédures-triggers-tables-vues-contraintes-et- all-other-database-objects/ – johnny

Répondre

4

Vous pouvez générer des scripts en faisant un clic droit sur la base de données -> tâches -> générer des scripts depuis sql management studio. Dans l'assistant, vous pouvez sous Paramètres avancés (en fonction de la version des outils de gestion sql) choisir si vous voulez un schéma, des données ou les deux. enter image description here

MISE À JOUR

Pour créer la base de données, vous pouvez utiliser SQL généré programatically et l'exécuter via ADO.NET. Ou, si vous utilisez CodeFirst, il peut le faire automatiquement si vous définissez l'initialiseur CreateDatabaseIfNotExists pour le contexte dans votre classe de test. Vous pouvez créer le contexte CodeFirst à partir de votre base de données en procédant au reverse engineering de l'application existante à l'aide de Entity Framework Power Tools pour Visual Studio. Dans ce cas, vous n'avez qu'à spécifier une chaîne de connexion à une base de données non existante et CF la créera pour vous. Vous pouvez également spécifier DropCreateDatabaseAlways pour que votre base de données soit actualisée à chaque fois que vous exécutez votre test (identique à l'exécution de sql query chaque fois que vous ajoutez la base de données en question au script sql généré) Si vous utilisez codefirst, vous n'avez pas besoin générer des scripts SQL.

Si vous préférez l'une de ces méthodes, je peux vous fournir plus de ressources si vous le souhaitez?

+1

Je le sais, j'ai demandé comment cela peut être fait par programmation non via une interface graphique. – Blankman

+0

J'ai élargi ma réponse, avez-vous besoin de plus d'informations? –

1

Vous utiliseriez les objets de la bibliothèque SQL Server Management Objects Class. Par exemple, la classe Database implémente IScriptable. Je m'en servirais comme point de départ (mais je ne l'ai pas fait moi-même). Il est possible que le script généré génère trop de données non pertinentes. Dans ce cas, vous devrez peut-être énumérer des tables individuelles et générer des scripts pour ces tables.

Mais SMO est toujours la réponse (de nos jours) à "comment faire la tâche de gestion X contre SQL Server?".

3

Vous pouvez le faire par programmation dans nhibernate. NHibernate crée toutes les tables et les relations dans la base de données que vous créez uniquement l'instance de base de données (nom) dans un serveur de base de données comme Oracle, MySQL, MSSQL ...

Vous pouvez regarder this pour plus de détails.

Questions connexes