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

102

J'ai une base de données SQL et des tables que je voudrais répliquer dans un autre serveur SQL. Je voudrais 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 suffirait.

Merci.

Tony
la source
26
pouvez-vous changer la réponse acceptée?
skolima
1
@skolima est d'accord, la réponse acceptée (par Clayton) obtiendra finalement le résultat, mais la réponse de CJM est beaucoup plus rapide
elmer007

Réponses:

18

Dans SQL Server Management Studio, vous pouvez cliquer avec le bouton droit sur la base de données que vous souhaitez répliquer et sélectionner «Script Database as» pour que l'outil crée le fichier SQL approprié pour 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 en 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 l'obtenir dans un fichier dans SSMS.

  1. Cliquez avec le bouton droit sur une base de données.
  2. Tâches
  3. Générer des scripts

Cela lancera un assistant dans lequel vous pourrez créer un script pour la base de données entière ou seulement des portions. Il ne semble pas y avoir de moyen T-SQL de le faire.

Générer des scripts SQL Server

Clayton
la source
182
Continuez à faire défiler ... La méthode de CJM est 99,99999% meilleure
ewitkows
La réponse de CJM ne suffit toujours pas. Après l'application de la méthode CJM, vous devez également appliquer la méthode Shawna Jacobs.
Andrzej Martyna
Quoi qu'il en soit, pour ce faire, le SQL standard pour mysql par exemple?
Benjamin Goodacre
378

Bien que la réponse de Clayton vous y mènera (éventuellement), dans SQL2005 / 2008 / R2 / 2012, vous avez une option beaucoup plus simple:

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

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

Si vous souhaitez recréer les données dans la base de données (en tant que série d'INSERTS), je vous recommande également SSMS Tools Pack (gratuit pour la version SQL 2008, payé pour la version SQL 2012).

CJM
la source
5
C'est excellent, je viens de le faire et m'a fait gagner beaucoup de temps.
Bill Sambrone
@CJM Je pense que je t'aime PRESQUE! :-P
Piero Alberto
J'ai suivi ces étapes à la lettre, mais je reçois toujours des tonnes d'erreurs et je ne peux pas les corriger. De l'aide?
user1789573
Je vous suggère de poster votre propre question à ce sujet - assurez-vous de publier des détails sur les étapes que vous avez suivies et les erreurs que vous avez reçues.
CJM
@ user1789573 - comme Shawna Jacobs l'a écrit - SSMS ne se soucie pas des dépendances (dommage pour SSMS devteam!) donc vous aurez des tonnes d'erreurs "par conception". Suivez Shawna Jacobs en réponse à cette faiblesse du SSMS.
Andrzej Martyna
9

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

Avec l'aimable autorisation d'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 les tâches -> générer des scripts
  2. Suivant -> sélectionnez la ou les tables demandées (à partir de certains objets de base de données spécifiques)
  3. Suivant -> cliquez sur avancé -> types de données à script = schéma et données

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

Bonjour ImKevo
la source
7

Je ne sais 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 faire si votre base de données contient 200 objets? Dans ce cas, l'ordre d'exécution importe car il n'est pas vraiment facile de passer en revue tout cela.

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

a) Exécuter le script (certains objets seront insérés d'autres, il y aura des erreurs)

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

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

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

Tous ces éléments prendront en charge les dépendances pour vous et vous feront gagner encore plus de temps.

Shawna Jacobs
la source
1

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

duffymo
la source