Je veux pouvoir script le schéma d'une base de données donnée dans un fichier .sql à partir de l'invite de commande Windows. Fondamentalement, je souhaite exécuter la fonctionnalité "Generate Scripts" du studio de gestion par programme.
Je sais que c'est possible en utilisant .NET et SMO, mais y a-t-il quelque chose d'intégré pour faire cela?
Contexte de cette question: Ceci est conçu comme un simple instrument d'audit. Nous voulons capturer le schéma tous les soirs. Toute solution primitive et basse fonctionne pour nous.
Il n'y a rien d'intégré de la ligne de commande.
Si vous avez la porte rouge SQL Comparer Vous pouvez le faire:
sqlcompare /s1:MySQLInstance /db1:MyDB /mkscr:MyDB_Schema /q
Les fonctions de script SSMS ne sont que des emballages pour SMO. Je sais que vous le mentionnez, mais vous pouvez écrire un script PowerShell pour utiliser le SMO.
Ceci est adapté à partir du code trouvé sur ce (( simple message de conversation .
[System.Reflection.Assembly]::LoadWithPartialName("Microsoft.SqlServer.SMO")
$serverName = "MYSQLINSTANCE"
$databaseName = "MyDB"
$sqlServer = new-object("Microsoft.SqlServer.Management.Smo.Server") $serverName
$sqlDb = $sqlServer.Databases[$databasename]
$options = new-object ("Microsoft.SqlServer.Management.Smo.ScriptingOptions")
$options.ExtendedProperties = $true
$options.DRIAll = $true
$options.Indexes = $true
$options.Triggers = $true
$options.ScriptBatchTerminator = $true
$options.Filename = "c:\\script_folder\\mydb_schema.sql"
$options.IncludeHeaders = $true
$options.ToFileOnly = $true
$transfer = new-object ("Microsoft.SqlServer.Management.Smo.Transfer") $sqlDb
$transfer.options = $options
$transfer.ScriptTransfer()
J'ai écrit une utilitaire de ligne de commande open source nommée Schemazen qui fait cela. C'est beaucoup plus rapide que le script du studio de gestion et la sortie est davantage de contrôle contrôlable. Il prend en charge la script de schéma et de données.
Pour générer des scripts exécuter:
schemazen.exe script --Server localhost --Database dB --ScriptDir c:\Somedir
Ensuite, pour recréer la base de données des scripts exécutés:
schemazen.exe Create --Server localhost --Database dB --ScriptDir c:\Somedir
Il suffit de nourrir - SQUILLAN'S Réponse Il s'agit de montrer un échantillon de ce que SQLPS peut faire pour vous ... Vous pouvez parcourir chaque "répertoire" dans la base de données et juste faire un get-member -MemberType Method
, à la recherche de Script()
. La plupart des annuaires l'ont croire.
Add-PSSnapin *SQL*
# Note my hostname of the server is "SQLSERVER"
# To show object names to be scripted
dir SQLSERVER:\SQL\SQLSERVER\DEFAULT\Databases\JProCo\Tables | Select Name
$objects = dir SQLSERVER:\SQL\SQLSERVER\DEFAULT\Databases\JProCo\Tables
$objects | % {$_.Script()}
Regardez de véritable serveur:
Vous pouvez utiliser l'assistant de publication de base de données SQL Server.
Si vous ne l'avez pas installé, vous pouvez saisir la version 1.2 de ici
L'installateur ne donne aucune indication qu'il a installé mais si vous ouvrez une fenêtre de commande et accédez à:
C:\Program Files (x86)\Microsoft SQL Server\90\Tools\Publishing\1.2
le SqlPubWiz.exe
devrait être là.
Vous pouvez utiliser cela pour scripter votre schéma.
Taper SqlPubWiz help script
Dans votre fenêtre de commande et cela vous donnera les options dont vous avez besoin.