J'exécute SQL Server 2012.
SQL Server Management Studio a la possibilité de cliquer avec le bouton droit sur une base de données, puis de sélectionner Tâches et générer des scripts.
Existe-t-il un moyen d'automatiser cela via la ligne de commande?
Je veux créer un script qui inclut le schéma et les données de la base de données entière.
Des outils comme ScriptDB
et sqlpubwiz.exe
tous semblent viser SQL Server 2005. Qu'en est-il de SQL Server 2012?
Le mieux est d'utiliser Powershell - si vous comptez l'utiliser fréquemment. Vous pouvez vous référer à Génération automatisée de scripts avec Powershell et SMO .
En outre, SQL Server PowerShell Extensions (SQLPSX) sont d'une grande valeur lorsque vous travaillez avec Powershell. Tous les modules ont des fichiers d'aide, par ex. Get-SqlScripter .
Get-SqlDatabase -dbname database1 -sqlserver server | Get-SqlTable | Get-SqlScripter | Set-Content -Path D:\scripts\script.sql
Get-SqlDatabase -dbname database1 -sqlserver server | Get-SqlStoredProcedure | Get-SqlScripter
Get-SqlDatabase -dbname database1 -sqlserver server | Get-SqlView | Get-SqlScripter
Pour les outils tiers, je recommande fortement de vérifier (il existe de nombreux outils tiers, mais ci-dessous ceux que j'ai utilisés et ils sont excellents):
Tara Raj de Microsoft a récemment annoncé que l'équipe Microsoft SQL a publié un ensemble d'outils de ligne de commande pour générer des scripts T-SQL qui semblent faire exactement ce que vous avez demandé:
mssql-scripteur
Mssql-scriptter est l'équivalent en ligne de commande multiplateforme de l'expérience générée de génération de scripts Wizard expérience en SSMS.
Vous pouvez utiliser mssql-scriptter sur Linux, macOS et Windows pour générer des scripts T-SQL de langage de définition de données (DDL) et de langage de manipulation de données (DML) pour les objets de base de données dans SQL Server exécutés n'importe où, Azure SQL Database et Azure SQL Data Warehouse . Vous pouvez enregistrer le script T-SQL généré dans un fichier .sql ou le diriger vers les utilitaires standard * nix (par exemple, sed, awk, grep) pour d'autres transformations. Vous pouvez modifier le script généré ou le vérifier dans le contrôle de code source et ensuite exécuter le script dans vos processus de déploiement de base de données SQL existants et pipelines DevOps avec des outils de ligne de commande SQL multiplateforme standard tels que sqlcmd.
Mssql-scriptter est construit en utilisant Python et incorpore les principes d'utilisation des nouveaux outils Azure CLI 2.0. Le code source peut être trouvé sur Github à https://github.com/ Microsoft/sql-xplat-cli , et nous nous réjouissons de vos contributions et demandes de pull!
Quelques exemples d'utilisation:
Générer des scripts DDL pour tous les objets de base de données (par défaut) dans la base de données Adventureworks et les exporter vers stdout
$ mssql-scripter -S localhost -d AdventureWorks -U sa
Générez des scripts DDL pour tous les objets de base de données et des scripts DML (instructions INSERT) pour toutes les tables de la base de données Adventureworks et enregistrez le script dans un fichier
$ mssql-scripter -S localhost -d AdventureWorks -U sa –schema-and-data > ./output.sql
J'ai écrit un utilitaire de ligne de commande open source nommé SchemaZen qui fait cela. C'est beaucoup plus rapide que les scripts de gestion studio et sa sortie est plus conviviale pour le contrôle de version. Il prend en charge l'écriture de scripts à la fois sur le schéma et les 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écutés:
schemazen.exe créer --server localhost --database db --scriptDir c:\somedir
Juste une mise à jour: dans les versions actuelles des modules PowerShell SQL Server (SQL Server 2014 et suivants, je pensais. Testé sur SSMS 17), la plupart de ces options sont des commandes et des méthodes natives.
Par exemple, vous pouvez utiliser Get-SqlDatabase et des méthodes telles que . Script () et . EnumScript (). C'est vraiment utile et simple, surtout si vous souhaitez une approche plus granulaire (tables spécifiques et autres objets).
Par exemple, cela générera des scripts CREATE pour les fonctions définies par l'utilisateur et l'enregistrera dans un fichier:
$Database = Get-SqlDatabase -ServerInstance $YourSqlServer -Name $YourDatabaseName
$MyFuncs = $Database.UserDefinedFunctions | Where Schema -eq "dbo"
$MyFuncs.Script() | Out-File -FilePath ".\SqlScripts\MyFunctions.sql"
Si vous voulez données de script et des éléments comme les index, les clés, les déclencheurs, etc., vous devrez spécifier des options de script, comme ceci:
$scriptOptions = New-Object -TypeName Microsoft.SqlServer.Management.Smo.ScriptingOptions
$scriptOptions.NoCollation = $True
$scriptOptions.Indexes = $True
$scriptOptions.Triggers = $True
$scriptOptions.DriAll = $True
$scriptOptions.ScriptData = $True
$Database.Tables.EnumScript($scriptOptions) | Out-File -FilePath ".\AllMyTables.sql"
Notez que la méthode Script () ne prend pas en charge les données de script. Utilisez EnumScript () pour les tableaux.
A table unique:
($Database.Tables | Where Name -eq "MyTableName").EnumScript($scriptOptions)
Toutes vos vues, enregistrez n fichier pour chacune vue, DROP et CREATE script:
ForEach ($view in $($Database.Views | Where Schema -eq "dbo")) {
"`nIF OBJECT_ID('$($view.Name)') IS NOT NULL DROP VIEW $($view.Name);`n`n" | Out-File -FilePath ".\SqlScripts\$($view.Name).sql"
$view.Script() | Out-File -FilePath ".\SqlScripts\$($view.Name).sql" -Append
}
J'espère que cela t'aides.
Vous pouvez utiliser les versions en ligne de commande de xSQL Schema Compare et xSQL Data Compare . Avec les versions en ligne de commande, vous pouvez planifier des comparaisons périodiques de données et de schémas par rapport à une base de données vide et cela a toujours les scripts pour créer une réplique exacte de la dernière version de votre base de données à partir de zéro.
Divulgation: je suis affilié à xSQL.