SQL Server 2012: genera script dalla riga di comando


19

Sto eseguendo SQL Server 2012.

SQL Server Management Studio ha l'opzione di fare clic con il pulsante destro del mouse su un database, quindi selezionare Attività e Genera script.

C'è un modo per automatizzarlo in qualche modo tramite la riga di comando?

Voglio creare uno script che includa lo schema e i dati dell'intero database.

Strumenti come ScriptDBe sqlpubwiz.exetutti sembrano destinati a SQL Server 2005. Che dire di SQL Server 2012?

Risposte:


20

La cosa migliore è usare Powershell - se lo utilizzerai frequentemente. È possibile fare riferimento alla generazione automatica di script con Powershell e SMO .

Inoltre, le estensioni PowerShell di SQL Server (SQLPSX) sono di grande valore quando si lavora con Powershell. Tutti i moduli hanno file di aiuto, ad esempio 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

Per strumenti di terze parti, consiglio vivamente di dare un'occhiata (ci sono molti strumenti di terze parti là fuori, ma sotto quelli che ho usato e sono fantastici):


10

Tara Raj di Microsoft ha recentemente annunciato che il team di Microsoft SQL ha rilasciato una serie di strumenti da riga di comando per generare script T-SQL che sembrano fare esattamente quello che hai chiesto:

mssql-Scripter

Mssql-scripter è l'equivalente da riga di comando multipiattaforma dell'esperienza di Generate Scripts Wizard ampiamente utilizzata in SSMS.

È possibile usare mssql-scripter su Linux, macOS e Windows per generare script T-SQL del linguaggio di definizione dei dati (DDL) e del linguaggio di manipolazione dei dati (DML) per oggetti di database in SQL Server in esecuzione ovunque, Database SQL di Azure e Azure SQL Data Warehouse . È possibile salvare lo script T-SQL generato in un file .sql o reindirizzarlo a utility * nix standard (ad esempio, sed, awk, grep) per ulteriori trasformazioni. È possibile modificare lo script generato o controllarlo nel controllo del codice sorgente ed eseguire successivamente lo script nei processi di distribuzione del database SQL esistenti e nelle pipeline DevOps con strumenti standard della riga di comando SQL multipiattaforma come sqlcmd.

Mssql-scripter è creato usando Python e incorpora i principi di usabilità dei nuovi strumenti dell'interfaccia della riga di comando di Azure 2.0. Il codice sorgente è disponibile su Github all'indirizzo https://github.com/Microsoft/sql-xplat-cli , e accogliamo con favore i vostri contributi e richieste pull!

Alcuni esempi di utilizzo:

Generare script DDL per tutti gli oggetti del database (impostazione predefinita) nel database Adventureworks e inviarli a stdout

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

Generare script DDL per tutti gli oggetti del database e script DML (istruzioni INSERT) per tutte le tabelle nel database Adventureworks e salvare lo script in un file

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

9

Ho scritto un'utilità da riga di comando open source denominata SchemaZen che fa questo. È molto più veloce degli script di Management Studio e l'output è più adatto al controllo delle versioni. Supporta lo scripting sia di schema che di dati.

Per generare gli script eseguiti:

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

Quindi per ricreare il database dagli script in esecuzione:

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

0

È possibile utilizzare le versioni della riga di comando di xSQL Schema Compare e xSQL Data Compare . Con le versioni da riga di comando è possibile pianificare periodici confronti di dati e schemi rispetto a un database vuoto e questo ha sempre gli script per creare una replica esatta dell'ultima versione del database da zero.

Divulgazione: sono affiliato a xSQL.


0

Solo un aggiornamento: nelle versioni attuali dei moduli PowerShell di SQL Server (SQL Server 2014 e successivi, ho creduto. Testato su SSMS 17), la maggior parte di queste opzioni sono comandi e metodi nativi.

Ad esempio, è possibile utilizzare Get-SqlDatabase e metodi come .Script () e .EnumScript (). È davvero utile e semplice, soprattutto se si desidera un approccio più granulare (tabelle specifiche e altri oggetti).

Ad esempio, questo genererà script CREATE per le funzioni definite dall'utente e lo salverà su file:

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

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

Se si desidera creare script di dati ed elementi come indici, chiavi, trigger, ecc., È necessario specificare le opzioni di scripting, in questo modo:

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

Si noti che il metodo Script () non supporta i dati di scripting. Utilizzare EnumScript () per le tabelle.

Un unico tavolo :

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

Tutte le tue visualizzazioni, salva un file per ogni visualizzazione, DROP e 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
}

Spero che sia di aiuto.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.