SQL Server 2012: Generieren Sie Skripts über die Befehlszeile

19

Ich verwende SQL Server 2012.

Das SQL Server Management Studio bietet die Möglichkeit, mit der rechten Maustaste auf eine Datenbank zu klicken und dann Aufgaben und Skripts zu generieren.

Gibt es eine Möglichkeit, das irgendwie über die Kommandozeile zu automatisieren?

Ich möchte ein Skript erstellen, das das Schema und die Daten der gesamten Datenbank enthält.

Tools wie ScriptDBund sqlpubwiz.exealle scheinen auf SQL Server 2005 abzuzielen. Was ist mit SQL Server 2012?

Harald
quelle

Antworten:

20

Am besten verwenden Sie Powershell, wenn Sie es häufig verwenden. Sie können sich auf die automatische Skriptgenerierung mit Powershell und SMO beziehen .

Außerdem sind SQL Server PowerShell-Erweiterungen (SQLPSX) für die Arbeit mit Powershell von großem Wert. Alle Module haben Hilfedateien, zB 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

Für Tools von Drittanbietern empfehlen wir dringend das Auschecken (es gibt viele Tools von Drittanbietern, aber die folgenden Tools habe ich verwendet und sie sind großartig):

Kin Shah
quelle
9

Ich habe ein Open Source-Befehlszeilenprogramm namens SchemaZen geschrieben , das dies tut. Es ist viel schneller als Skripte aus Management Studio und die Ausgabe ist versionskontrollfreundlicher. Es unterstützt die Skripterstellung sowohl für das Schema als auch für die Daten.

So generieren Sie Skripte:

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

Führen Sie dann zum erneuten Erstellen der Datenbank aus den Skripten Folgendes aus:

schemazen.exe create --server localhost --database db --scriptDir c: \ somedir
Seth Reno
quelle
9

Tara Raj von Microsoft gab kürzlich bekannt, dass das Microsoft SQL-Team eine Reihe von Befehlszeilentools zum Generieren von T-SQL-Skripten veröffentlicht hat , die genau das tun, was Sie gefragt haben:

Mssql-Scripter

Mssql-scripter ist das plattformübergreifende Befehlszeilenäquivalent zum weit verbreiteten Assistenten zum Generieren von Skripten in SSMS.

Sie können mssql-scripter unter Linux, macOS und Windows verwenden, um T-SQL-Skripts für Datendefinitionssprachen (DDL) und Datenbearbeitungssprachen (DML) für Datenbankobjekte in SQL Server zu generieren, die überall ausgeführt werden, Azure SQL-Datenbank und Azure SQL Data Warehouse . Sie können das generierte T-SQL-Skript in einer .sql-Datei speichern oder für weitere Transformationen an Standard * nix-Dienstprogramme (z. B. sed, awk, grep) weiterleiten. Sie können das generierte Skript bearbeiten oder in die Quellcodeverwaltung einchecken und anschließend das Skript in Ihren vorhandenen SQL-Datenbankbereitstellungsprozessen und DevOps-Pipelines mit standardmäßigen SQL-Befehlszeilentools für mehrere Plattformen wie sqlcmd ausführen.

Mssql-scripter wurde mit Python erstellt und enthält die Bedienungsprinzipien der neuen Azure CLI 2.0-Tools. Der Quellcode ist auf Github unter https://github.com/Microsoft/sql-xplat-cli zu finden. Wir freuen uns über Ihre Beiträge und Anfragen!

Einige Anwendungsbeispiele:

Generieren Sie DDL-Skripte für alle Datenbankobjekte (Standard) in der Adventureworks-Datenbank und geben Sie sie an stdout aus

$ mssql-scripter -S localhost -d AdventureWorks -U sa

Generieren Sie DDL-Skripte für alle Datenbankobjekte und DML-Skripte (INSERT-Anweisungen) für alle Tabellen in der Adventureworks-Datenbank und speichern Sie das Skript in einer Datei

$ mssql-scripter -S localhost -d AdventureWorks -U sa schema-and-data  > ./output.sql
BradC
quelle
0

Sie können die Befehlszeilenversionen von xSQL Schema Compare und xSQL Data Compare verwenden . Mit den Befehlszeilenversionen können Sie regelmäßige Daten- und Schemavergleiche für eine leere Datenbank einplanen. Auf diese Weise verfügen Sie immer über die Skripte, um ein genaues Replikat der neuesten Version Ihrer Datenbank von Grund auf neu zu erstellen.

Offenlegung: Ich bin mit xSQL verbunden.

Endi Zhupani
quelle
0

Nur ein Update: In aktuellen Versionen von SQL Server-Powershell-Modulen (SQL Server 2014 und höher, glaube ich. Getestet auf SSMS 17) sind die meisten dieser Optionen native Befehle und Methoden.

Beispielsweise können Sie Get-SqlDatabase und Methoden wie .Script () und .EnumScript () verwenden. Dies ist sehr nützlich und einfach, insbesondere wenn Sie einen detaillierteren Ansatz (bestimmte Tabellen und andere Objekte) wünschen.

Dadurch werden beispielsweise CREATE-Skripte für benutzerdefinierte Funktionen generiert und in einer Datei gespeichert:

$Database = Get-SqlDatabase -ServerInstance $YourSqlServer -Name $YourDatabaseName

$MyFuncs = $Database.UserDefinedFunctions | Where Schema -eq "dbo"
$MyFuncs.Script() | Out-File -FilePath ".\SqlScripts\MyFunctions.sql"

Wenn Sie Daten und Elemente wie Indizes, Schlüssel, Trigger usw. skripten möchten , müssen Sie folgende Skriptoptionen angeben:

$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"

Beachten Sie, dass die Script () -Methode keine Skriptdaten unterstützt. Verwenden Sie EnumScript () für Tabellen.

Ein einziger Tisch :

($Database.Tables | Where Name -eq "MyTableName").EnumScript($scriptOptions)

Speichern Sie alle Ihre Ansichten, eine Datei pro Ansicht, DROP- und CREATE-Skript:

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
}

Hoffe das hilft.

Victor Lopes
quelle