SQL Server 2012: Komut satırından komut dosyaları oluşturma


19

SQL Server 2012 kullanıyorum.

SQL Server Management Studio, bir veritabanını sağ tıklatıp Görevler ve Komut Dosyaları Oluştur'u seçebilir.

Bunu bir şekilde komut satırı üzerinden otomatikleştirmenin bir yolu var mı?

Tüm veri tabanının şemasını ve verilerini içeren bir komut dosyası oluşturmak istiyorum.

Araçlar gibi ScriptDBve sqlpubwiz.exehepsi SQL Server 2005'i hedefliyor gibi görünüyor. Peki ya SQL Server 2012?

Yanıtlar:


20

En iyisi Powershell kullanmaktır - sık sık kullanacaksanız. Powershell ve SMO ile Otomatik Komut Dosyası oluşturma konusuna başvurabilirsiniz .

Ayrıca, SQL Server PowerShell Uzantıları (SQLPSX) , Powershell ile çalışırken çok değerlidir. Tüm modüllerin yardım dosyaları var, örneğin 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

Üçüncü taraf araçlar için, kontrol etmenizi önemle tavsiye ederiz (orada birçok üçüncü taraf aracı vardır, ancak kullandıklarımın altında ve harikalar):


10

Microsoft'tan Tara Raj, kısa bir süre önce Microsoft SQL ekibinin tam olarak sorduğunuz şeyi yapıyor gibi görünen T-SQL komut dosyaları oluşturmak için bir dizi komut satırı aracı yayınladığını duyurdu :

mssql-scripter

Mssql-scripter, SSMS'de yaygın olarak kullanılan Komut Dosyaları Oluşturma Sihirbazı deneyiminin çok platformlu komut satırı eşdeğeridir.

Linux, macOS ve Windows'ta mssql-scripter'ı, SQL Server'da her yerde çalışan veritabanı nesneleri, Azure SQL Veritabanı ve Azure SQL Veri Ambarı için veri tanımlama dili (DDL) ve veri işleme dili (DML) T-SQL komut dosyaları oluşturmak için kullanabilirsiniz . Oluşturulan T-SQL komut dosyasını bir .sql dosyasına kaydedebilir veya daha fazla dönüşüm için standart * nix yardımcı programlarına (örneğin, sed, awk, grep) bağlayabilirsiniz. Oluşturulan betiği düzenleyebilir veya kaynak denetiminde kontrol edebilir ve daha sonra betiği sqlcmd gibi standart çok platformlu SQL komut satırı araçlarıyla mevcut SQL veritabanı dağıtım işlemlerinizde ve DevOps boru hatlarında yürütebilirsiniz.

Mssql-scripter, Python kullanılarak oluşturulmuştur ve yeni Azure CLI 2.0 araçlarının kullanılabilirlik ilkelerini içermektedir. Kaynak kodu Github'da https://github.com/Microsoft/sql-xplat-cli adresinde bulabilirsiniz , katkılarınızı ve isteklerinizi bekliyoruz!

Bazı kullanım örnekleri:

Adventureworks veritabanındaki tüm veritabanı nesneleri için DDL komut dosyaları oluşturma (varsayılan) ve stdout'a çıkış

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

Tüm veritabanı nesneleri için DDL komut dosyaları ve Adventureworks veritabanındaki tüm tablolar için DML komut dosyaları (INSERT deyimleri) oluşturun ve komut dosyasını bir dosyaya kaydedin

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

9

Bunu yapan SchemaZen adlı bir açık kaynak komut satırı yardımcı programı yazdım . Yönetim stüdyosundan betiklemekten çok daha hızlıdır ve çıktısı daha fazla sürüm kontrol dostu. Hem şema hem de veri komut dosyası oluşturmayı destekler.

Komut dosyaları oluşturmak için çalıştırın:

schemazen.exe komut dosyası - sunucu localhost - veritabanı db --scriptDir c: \ somedir

Sonra veritabanını komut dosyalarından yeniden oluşturmak için çalıştırın:

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

0

XSQL Şema Karşılaştırması ve xSQL Veri Karşılaştırması komut satırı sürümlerini kullanabilirsiniz . Komut satırı sürümleri ile boş bir veritabanına karşı periyodik veri ve şema karşılaştırmaları zamanlayabilirsiniz ve bu her zaman sıfırdan veritabanınızın en son sürümünün tam bir kopyasını oluşturmak için komut dosyaları vardır.

Açıklama: xSQL'e bağlıyım.


0

Sadece bir güncelleme: SQL Server powershell modüllerinin mevcut sürümlerinde (SQL Server 2014 ve üzeri, inandım. SSMS 17'de test edildi), bu seçeneklerin çoğu yerel komutlar ve yöntemlerdir.

Örneğin, Get-SqlDatabase'i ve .Script () ve .EnumScript () gibi yöntemleri kullanabilirsiniz . Özellikle daha ayrıntılı bir yaklaşım (belirli tablolar ve diğer nesneler) istiyorsanız, gerçekten kullanışlı ve basittir.

Örneğin, bu, kullanıcı tanımlı işlevler için CREATE komut dosyaları oluşturur ve bunu dosyaya kaydeder:

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

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

Eğer isterseniz komut verileri vb endeksler, anahtarlar, tetikleyiciler, benzeri ve elementler böyle, komut dosyası seçenekleri belirlemek zorunda kalacak:

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

Script () yönteminin komut dosyası verilerini desteklemediğini unutmayın. Tablolar için EnumScript () kullanın.

Bir tek tablo :

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

Tüm görünümleriniz, her görünüm için bir dosya , DROP ve CREATE komut dosyası kaydedin :

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
}

Bu yardımcı olur umarım.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.