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.