SQL Server 2012: Hasilkan Script dari baris perintah

19

Saya menjalankan SQL Server 2012.

SQL Server Management Studio memiliki opsi untuk mengklik kanan pada database kemudian pilih Tugas dan Buat Skrip.

Apakah ada cara untuk mengotomatiskan itu melalui baris perintah entah bagaimana?

Saya ingin membuat skrip yang mencakup skema dan data dari seluruh basis data.

Alat-alat suka ScriptDBdan sqlpubwiz.exesemua tampaknya menargetkan SQL Server 2005. Bagaimana dengan SQL Server 2012?

Harald
sumber

Jawaban:

20

Cara terbaik adalah menggunakan Powershell - jika Anda akan sering menggunakannya. Anda dapat merujuk ke Pembuatan Script Otomatis dengan Powershell dan SMO .

Juga, SQL Server PowerShell Extensions (SQLPSX) sangat berguna saat bekerja dengan Powershell. Semua modul memiliki file bantuan misalnya 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

Untuk alat pihak ketiga, sangat disarankan untuk memeriksa (ada banyak alat pihak ketiga di luar sana, tetapi di bawah ini saya telah menggunakan dan mereka hebat):

Kin Shah
sumber
10

Tara Raj dari Microsoft baru-baru ini mengumumkan bahwa tim Microsoft SQL telah merilis seperangkat alat baris perintah untuk menghasilkan skrip T-SQL yang tampaknya melakukan persis apa yang Anda tanyakan:

mssql-scripter

Mssql-scripter adalah baris perintah multiplatform yang setara dengan pengalaman Generate Scripts Wizard yang digunakan secara luas di SSMS.

Anda dapat menggunakan mssql-scripter di Linux, macOS, dan Windows untuk menghasilkan bahasa definisi data (DDL) dan bahasa manipulasi data (DML) skrip T-SQL untuk objek database di SQL Server yang berjalan di mana saja, Azure SQL Database, dan Azure SQL Data Warehouse . Anda dapat menyimpan skrip T-SQL yang dihasilkan ke file .sql atau mengirimnya ke utilitas * nix standar (misalnya, sed, awk, grep) untuk transformasi lebih lanjut. Anda dapat mengedit skrip yang dibuat atau memeriksanya ke dalam kontrol sumber dan kemudian menjalankan skrip dalam proses penyebaran database SQL yang ada dan DevOps pipelines dengan alat baris perintah standar multiplatform SQL seperti sqlcmd.

Mssql-scripter dibangun menggunakan Python dan menggabungkan prinsip-prinsip kegunaan alat Azure CLI 2.0 yang baru. Kode sumber dapat ditemukan di Github di https://github.com/Microsoft/sql-xplat-cli , dan kami menyambut kontribusi Anda dan menarik permintaan!

Beberapa contoh penggunaan:

Hasilkan skrip DDL untuk semua objek basis data (default) di basis data Adventureworks dan hasilkan ke stdout

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

Hasilkan skrip DDL untuk semua objek basis data dan skrip DML (pernyataan INSERT) untuk semua tabel dalam database Adventureworks dan simpan skrip ke file

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

Saya menulis sebuah utilitas baris perintah open source bernama SchemaZen yang melakukan ini. Ini jauh lebih cepat daripada scripting dari studio manajemen dan outputnya lebih ramah kontrol versi. Ini mendukung skrip baik skema dan data.

Untuk menghasilkan skrip dijalankan:

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

Kemudian untuk membuat ulang database dari skrip jalankan:

schemazen.exe membuat --server localhost --database db --scriptDir c: \ somedir
Seth Reno
sumber
0

Anda dapat menggunakan versi baris perintah xSQL Schema Compare dan xSQL Data Compare . Dengan versi baris perintah Anda dapat menjadwalkan data berkala dan perbandingan skema terhadap database kosong dan ini selalu memiliki skrip untuk membangun replika yang tepat dari versi terbaru dari database Anda dari awal.

Pengungkapan: Saya berafiliasi dengan xSQL.

Endi Zhupani
sumber
0

Hanya pembaruan: dalam versi saat ini modul powershell SQL Server (SQL Server 2014 dan seterusnya, saya percaya. Diuji pada SSMS 17), sebagian besar opsi ini adalah perintah dan metode asli.

Misalnya, Anda dapat menggunakan Get-SqlDatabase dan metode seperti .Script () dan .EnumScript (). Ini sangat berguna dan sederhana, terutama jika Anda menginginkan pendekatan yang lebih terperinci (tabel spesifik dan objek lainnya).

Misalnya, ini akan menghasilkan skrip CREATE untuk fungsi yang ditentukan pengguna dan menyimpannya ke file:

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

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

Jika Anda ingin skrip data dan elemen seperti indeks, kunci, pemicu, dll. Anda harus menentukan opsi skrip, seperti ini:

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

Perhatikan bahwa metode Script () tidak mendukung data skrip. Gunakan EnumScript () untuk tabel.

Meja tunggal :

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

Semua tampilan Anda, simpan satu file per setiap tampilan, DROP dan BUAT skrip:

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
}

Semoga ini membantu.

Victor Lopes
sumber