Script toute la base de données SQL-Server

95

Existe-t-il un moyen d'obtenir un script de toutes les tables, procs et autres objets d'une base de données? Je sais qu'il existe une option pour créer un script de la base de données, mais cela ne m'a donné qu'une sorte de script de niveau supérieur, certainement pas un script pour créer toutes les tables, procs, udfs, .etc.

PositiveGuy
la source
6
Il l'a étiqueté SQL Server 2008, donc je suppose que c'est ce qu'il utilise.
Colin Mackay
1
N'est-ce pas supposé aller sur serverfault.com?
Salamander2007

Réponses:

162

Depuis Management Studio, cliquez avec le bouton droit sur votre base de données. Tâches -> Générer des scripts.

Ça devrait le faire.

Chris Brandsma
la source
2
Une autre option consiste à utiliser SQL SMO et à le script par programme (c'est-à-dire si un script régulier est requis)
RobS
Existe-t-il un moyen de configurer un script pour ce faire afin que les paramètres soient toujours les mêmes, peu importe qui l'exécute? Je prévois que des membres de notre équipe de développement écraseront ce fichier avec des paramètres différents à chaque fois ...
Joe Phillips
@Joe, je suivrais la voie dont parle RobS. Vous devriez pouvoir le faire avec PowerShell. Sinon, commencez à regarder les outils RedGate ou Visual Studio Team Systems avec Database Developer.
Chris Brandsma
7
Par défaut, il ne script pas les données. Sous Options de table / vue, sélectionnez "Données de script -> Vrai". Une autre option utile est "Script Drop -> True"
Stephen Hosking
1
Le script généré ne contiendra aucune information sur le classement des colonnes, sauf si vous avez choisi la dernière option dans le menu Extra> Options> Génération de script. En allemand, l'option est "Sortierung einschließen". Même de la plupart de ces options sont incluses dans l'assistant générant le script, celle-ci ne l'est pas (SQL Server 2008). Vous devez vraiment sélectionner l'option avant d'appeler l'assistant.
Olivier Faucheux
14

J'ai écrit un utilitaire de ligne de commande open source nommé SchemaZen qui fait cela. C'est beaucoup plus rapide que le script du studio de gestion et sa sortie est plus conviviale pour le contrôle de version. Il prend en charge la création de scripts à la fois de schéma et de données.

Pour générer des scripts, exécutez:

script schemazen.exe --server localhost --database db --scriptDir c: \ somedir

Ensuite, pour recréer la base de données à partir de scripts exécutez:

schemazen.exe create --server localhost --database db --scriptDir c: \ somedir
Seth Reno
la source
Bonjour, je souhaite obtenir la requête SQL à partir de ma base de données locale créée dans Visual Studio, comment puis-je faire cela avec cet outil? Je dois utiliser le sens du fichier .sdf ou comment? Merci.
Karlo A. López
C'est un fichier SQL DataBase compact.
Karlo A. López
1
HOLY CRAP CECI EST RAPIDE ET IMPRESSIONNANT.
ConstantineK
1
@hobs Je suis content que vous l'ayez trouvé utile. : D
Seth Reno
1
Les index sys corrompus @SethReno sur mon db = SMO ne peuvent rien écrire, votre script le peut, donc en gros, cela m'a fait gagner beaucoup de temps à faire de la merde manuellement. BTW, une rétro-ingénierie incroyablement rapide de tout, comme 1000 fois plus rapide que SSMS et cela semble plus rapide que SMO en lui-même (notamment en raison du temps de démarrage).
ConstantineK
4

J'ai écrit un utilitaire pour cette tâche, SMOscript .

La génération de scripts est effectuée par la bibliothèque SMO et prend en charge les nouveaux types d'objets dans SQL 2005 et 2008.

devio
la source
Hmm, j'ai installé votre application smo sur mon Vista 64 bits. Installation réussie mais je ne vois pas d'élément dans mon répertoire de programmes ou dans la liste de tous les programmes
PositiveGuy
3

Nous avons fini par utiliser une combinaison de génération de scripts SSMS pour extraire le schéma et les données, puis utiliser notre propre outil de base de données qui permet l'analyse de mots-clés et le remplacement basé sur des jetons dans les scripts. Cela garantit également que les scripts ne sont appliqués qu'une seule fois.

Pourquoi?

  • Nous devons prendre en charge les installations sur SQL Server 2000, 2005 et 2008, et il y a des changements dans les types de données entre les versions, par exemple 2005+ ont nvarchar (max), alors que 2000 ne prend en charge que ntext. Ainsi, nos scripts utilisent un jeton et basé sur le choix de la base de données, le remplace par le type correct.
  • L'exécution de certains scripts nécessite une période d'attente après l'exécution, par exemple Nous avons constaté que si vous n'avez pas attendu quelques secondes après la création d'une nouvelle base de données via un script, le serveur SQL peut parfois échouer (car il n'a pas eu le temps de créer la base de données fichiers) lors de la création de tables, etc.
  • Nous voulions conserver un historique des scripts exécutés et à quel moment.
  • Nous voulions permettre à notre programme d'installation Wix MSI de spécifier la chaîne de connexion et les informations d'identification, et nous avions besoin d'un moyen de les transmettre aux scripts, donc encore une fois, en utilisant des jetons et une logique conditionnelle.

Exemple de script (modifié par souci de concision)

-- Sleep: 5 
-- Sleep after creating database to allow file system to create db files
CREATE DATABASE [$Database$]
GO

EXEC sp_dbcmptlevel [$Database$], $CompatabilityLevel$
GO

USE [$Database$]
GO

IF '1'!='$IntegratedSecurity$'
BEGIN
    CREATE LOGIN [$Login$] WITH PASSWORD=N'$Password$', DEFAULT_DATABASE=[$Database$]
    CREATE USER [$User$] FOR LOGIN [$Login$]
    EXEC sp_addrolemember N'db_owner', N'$User$'
END
GO
si618
la source
1

Je recommande de regarder RedGate SQL packager. Ce n'est pas gratuit, mais cela a été suffisamment utile pour en valoir le prix.

Barry blessé
la source
1

En regardant simplement les données de la table, pour afficher tout le contenu des données de la table dans Management Studio 2012 et 2014, elles sont un peu cachées mais j'ai trouvé l'option après quelques recherches:

  1. Faites un clic droit sur la base de données
  2. Sélectionnez "Tâches"> "Générer des scripts ..."
  3. Sur «Définir les options de script», cliquez sur «Avancé»
  4. Sous «Général», définissez «Types de données à script» sur true (il se trouve au bas du groupe «Général»)
Cameron Attaquant
la source
0

Si vous devez le faire par programme, vous pouvez utiliser la bibliothèque SQL DMO (OLE) contre SQL Server 2000, mais vous souhaiterez probablement utiliser la bibliothèque SQL SMO (bibliothèques .NET natives) avec SQL Server 2005 et versions ultérieures.

Ces deux bibliothèques font partie intégrante de l'installation des outils d'administration SQL Server.

C'est dans le cas où la génération du script de base de données complet à partir de SQL Server Management Studio est insuffisante.

polyglotte
la source