web-dev-qa-db-fra.com

Créer un script SQL qui crée une base de données et des tables

J'ai une base de données SQL et des tables que je voudrais répliquer dans un autre serveur SQL. Je souhaite créer un script SQL qui crée la base de données et les tables dans un seul script.

Je peux créer un script "Créer" en utilisant SQL Management Studio pour chaque cas (base de données et tables), mais j'aimerais savoir si la combinaison des deux scripts "Créer" en un seul script serait suffisante.

Merci.

94
tony

Dans SQL Server Management Studio, vous pouvez cliquer avec le bouton droit de la souris sur la base de données à répliquer et sélectionner "Script Database as" pour que l'outil crée le fichier SQL approprié afin de répliquer cette base de données sur un autre serveur. Vous pouvez répéter ce processus pour chaque table que vous souhaitez créer, puis fusionner les fichiers dans un seul fichier SQL. N'oubliez pas d'ajouter une instruction using après avoir créé votre base de données mais avant toute création de table.

Dans les versions plus récentes de SQL Server, vous pouvez obtenir cela dans un fichier dans SSMS.

  1. Faites un clic droit sur une base de données.
  2. Les tâches
  3. Générer des scripts

Cela lancera un assistant dans lequel vous pourrez créer un script pour toute la base de données ou seulement des portions. Il ne semble pas exister de méthode T-SQL pour ce faire.

Generate SQL Server Scripts

11
Clayton

Bien que la réponse de Clayton vous y conduise (éventuellement), SQL2005/2008/R2/2012 propose une option beaucoup plus simple:

Cliquez avec le bouton droit sur la base de données, sélectionnez Tasks puis Generate Scripts, qui lancera l'assistant de script. Cela vous permet de générer un seul script capable de recréer la base de données complète, y compris les tables/index et contraintes/procédures stockées/fonctions/utilisateurs/etc. Il existe une multitude d'options que vous pouvez configurer pour personnaliser la sortie, mais la plupart d'entre elles s'expliquent d'elles-mêmes.

Si vous êtes satisfait des options par défaut, vous pouvez effectuer tout le travail en quelques secondes.

Si vous souhaitez recréer les données dans la base de données (sous forme d'une série d'INSERTS), je vous recommanderais également SSMS Tools Pack (version gratuite pour SQL 2008, payée pour SQL 2012).

372
CJM

Une excellente explication peut être trouvée ici: Générer un script dans SQL Server Management Studio

Gracieuseté de ALi Issa Voici ce que vous devez faire:

  1. Faites un clic droit sur la base de données (pas sur la table) et sélectionnez des tâches -> générer des scripts
  2. Suivant -> sélectionner la ou les tables demandées (à partir de sélectionner des objets de base de données spécifiques)
  3. Suivant -> Cliquez sur Avancé -> Types de données dans un script = schéma et données

Si vous voulez créer un script qui ne génère que les tables (pas de données), vous pouvez ignorer la partie avancée des instructions!

8
HelloImKevo

Vous ne savez pas pourquoi SSMS ne prend pas en compte l’ordre d’exécution, mais ce n’est tout simplement pas le cas. Ce n'est pas un problème pour les petites bases de données, mais que se passe-t-il si votre base de données contient 200 objets? Dans ce cas, l’ordre d’exécution a son importance, car il n’est pas vraiment facile de les examiner toutes.

Pour les scripts non ordonnés générés par SSMS, vous pouvez aller sur

a) Exécuter le script (des objets seront insérés à la place, il y aura des erreurs)

b) Supprimer tous les objets du script qui ont été ajoutés à la base de données

c) Revenez en a) jusqu'à ce que tout soit finalement exécuté

Une autre option consiste à utiliser un outil tiers tel que Script ApexSQL ou tout autre outil déjà mentionné dans ce fil (ensemble d'outils SSMS, Red Gate et autres).

Tout cela s'occupera des dépendances pour vous et vous fera gagner encore plus de temps.

6
Shawna Jacobs

Oui, vous pouvez ajouter autant de déclarations SQL dans un seul script que vous le souhaitez. Juste une chose à noter: l'ordre compte. Vous ne pouvez pas INSÉRER dans une table avant de la CRÉER; vous ne pouvez pas définir de clé étrangère tant que la clé primaire n'est pas insérée.

1
duffymo