Est-il possible que je peux obtenir un script de toutes les tables, procs et autres objets d’une base de données ? Je sais il y a une option pour la base de données de script, mais il ne m’a donné une sorte de script de niveau supérieur, certainement pas un script pour créer tous les tableaux, les procs, udfs,. etc.
Réponses
Trop de publicités?J'ai écrit un utilitaire de ligne de commande nommé schemazen qui fait cela. C'est beaucoup plus rapide que les scripts de gestion de studio qu'il n'utilise pas de SMO.
Pour générer les scripts d'exécution:
schemazen.exe script --server localhost --base de données db-scriptDir c:\somedir
Alors pour recréer la base de données de l'exécution des scripts:
schemazen.exe créer: server localhost --base de données db-scriptDir c:\somedir
Nous nous sommes retrouvés à l'aide d'une combinaison de SSMS de génération de script pour extraire le schéma et les données, et ensuite utiliser notre propre base de données de l'outil de mots-clés et analyse de base de jetons de remplacement dans les scripts. Il assure également les scripts ne sont appliqués qu'une fois.
Pourquoi?
- Nous devons soutenir les installations sur SQL Server 2000, 2005 et 2008, et il y a des changements de types de données entre les différentes versions, par exemple 2005+ ont nvarchar(max), alors que 2000 prend en charge uniquement ntext. Donc, nos scripts utiliser un jeton sur la base db choix remplace avec 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 trouvé si vous n'avez pas à attendre quelques secondes après la création d'une nouvelle bases de données via un script, SQL Server peut échouer parfois (parce qu'il n'a pas eu le temps de créer les fichiers db) quand il est allé à créer des tables, etc.
- Nous avons voulu conserver un historique de ce que les scripts ont été exécutés, et quand.
- Nous avons voulu permettre à nos Wix programme d'installation MSI pour spécifier la chaîne de connexion et d'identification, et avaient besoin d'un moyen de passer ces dans les scripts, donc une fois de plus, à l'aide de jetons et de la logique conditionnelle.
Exemple de script (édité 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
Si vous avez besoin de le faire par programme, vous pouvez utiliser la bibliothèque SQL DMO (OLE) contre SQL Server 2000, mais plus probablement vous pouvez utiliser la bibliothèque de SMO SQL (bibliothèques .NET natives) contre SQL Server 2005 et versions ultérieures.
Ces deux bibliothèques font partie intégrante de l’installation des outils d’administration SQL Server.
Il s’agit dans le cas où la génération du script de base de données complète de SQL Server Management Studio ne suffit pas.