SQL Server 2012: Generuj skrypty z wiersza poleceń

19

Korzystam z programu SQL Server 2012.

SQL Server Management Studio ma opcję kliknięcia bazy danych prawym przyciskiem myszy, a następnie wybierz Zadania i Wygeneruj skrypty.

Czy istnieje sposób na zautomatyzowanie tego za pomocą wiersza polecenia?

Chcę utworzyć skrypt, który zawiera schemat i dane całej bazy danych.

Narzędzia takie jak ScriptDBi sqlpubwiz.exewszystkie wydają się być ukierunkowane na SQL Server 2005. Co z SQL Server 2012?

Harald
źródło

Odpowiedzi:

20

Najlepiej jest użyć programu PowerShell - jeśli zamierzasz go często używać. Możesz odwoływać się do automatycznego generowania skryptów za pomocą Powershell i SMO .

Ponadto rozszerzenia programu SQL Server PowerShell (SQLPSX) są bardzo przydatne podczas pracy z programem Powershell. Wszystkie moduły mają pliki pomocy, np. 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

W przypadku narzędzi innych firm zdecydowanie zalecamy sprawdzenie (istnieje wiele narzędzi innych firm, ale poniżej tych, których użyłem i są świetne):

Kin Shah
źródło
10

Tara Raj z Microsoft ogłosiła niedawno, że zespół Microsoft SQL wydał zestaw narzędzi wiersza poleceń do generowania skryptów T-SQL, które wydają się robić dokładnie to, o co prosiłeś:

mssql-scripter

Mssql-scripter to wieloplatformowy wiersz poleceń odpowiadający powszechnie używanej funkcji Generate Scripts Wizard w SSMS.

Za pomocą mssql-scripter w systemach Linux, macOS i Windows można generować skrypty T-SQL języka definicji danych (DDL) i języka manipulacji danymi (DML) dla obiektów bazy danych w programie SQL Server działającym w dowolnym miejscu, bazie danych Azure SQL i usłudze Azure SQL Data Warehouse . Możesz zapisać wygenerowany skrypt T-SQL w pliku .sql lub potokować go do standardowych narzędzi * nix (na przykład sed, awk, grep) w celu dalszych przekształceń. Możesz edytować wygenerowany skrypt lub sprawdzić go w kontroli źródła, a następnie wykonać skrypt w istniejących procesach wdrażania bazy danych SQL i potokach DevOps za pomocą standardowych wieloplatformowych narzędzi wiersza polecenia SQL, takich jak sqlcmd.

Mssql-scripter jest zbudowany przy użyciu Pythona i zawiera zasady użyteczności nowych narzędzi Azure CLI 2.0. Kod źródłowy można znaleźć na Github pod adresem https://github.com/Microsoft/sql-xplat-cli , a my przyjmujemy zgłoszenia i ściągamy prośby!

Niektóre przykłady użycia:

Wygeneruj skrypty DDL dla wszystkich obiektów bazy danych (domyślnie) w bazie danych Adventureworks i wyślij je na standardowe wyjście

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

Wygeneruj skrypty DDL dla wszystkich obiektów bazy danych i skrypty DML (instrukcje INSERT) dla wszystkich tabel w bazie danych Adventureworks i zapisz skrypt w pliku

$ mssql-scripter -S localhost -d AdventureWorks -U sa schema-and-data  > ./output.sql
BradC
źródło
9

Napisałem narzędzie wiersza polecenia o otwartym kodzie źródłowym o nazwie SchemaZen, które to robi. Jest znacznie szybszy niż tworzenie skryptów ze studia zarządzania, a jego wyniki są bardziej przyjazne dla kontroli wersji. Obsługuje skrypty zarówno schematu, jak i danych.

Aby wygenerować skrypty, uruchom:

skrypt schemazen.exe - serwer localhost - baza danych db --scriptDir c: \ somedir

Następnie, aby ponownie utworzyć bazę danych ze skryptów, uruchom:

schemazen.exe utwórz - serwer lokalny host - baza danych db --scriptDir c: \ somedir
Seth Reno
źródło
0

Można użyć wersji wiersza polecenia programu xSQL Schema Compare i xSQL Data Compare . Dzięki wersjom wiersza poleceń możesz zaplanować okresowe porównania danych i schematów z pustą bazą danych, a to zawsze zawiera skrypty do tworzenia dokładnej repliki najnowszej wersji bazy danych od zera.

Ujawnienie: Jestem związany z xSQL.

Endi Zhupani
źródło
0

Tylko aktualizacja: w obecnych wersjach modułów PowerShell programu SQL Server (jak sądzę, SQL Server 2014 i nowsze wersje. Testowane na SSMS 17) większość z tych opcji to natywne polecenia i metody.

Na przykład możesz użyć Get-SqlDatabase i metod takich jak .Script () i .EnumScript (). Jest to naprawdę przydatne i proste, szczególnie jeśli chcesz bardziej szczegółowego podejścia (określonych tabel i innych obiektów).

Na przykład wygeneruje skrypty CREATE dla funkcji zdefiniowanych przez użytkownika i zapisze je w pliku:

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

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

Jeśli chcesz skryptować dane i elementy, takie jak indeksy, klucze, wyzwalacze itp., Musisz określić opcje skryptów, takie jak:

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

Zauważ, że metoda Script () nie obsługuje danych skryptowych. Użyj EnumScript () dla tabel.

Pojedyncza tabela :

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

Wszystkie widoki, zapisz jeden plik dla każdego widoku, DROP i skrypt CREATE:

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
}

Mam nadzieję że to pomoże.

Victor Lopes
źródło