Лише оновлення: я вважав, що в поточних версіях модулів оболонок SQL Server (SQL Server 2014 і далі. Протестовано на SSMS 17) більшість із цих параметрів є нативними командами та методами.
Наприклад, ви можете використовувати Get-SqlDatabase та такі методи, як .Script () та .EnumScript (). Це дійсно корисно і просто, особливо якщо ви хочете більш детальний підхід (конкретні таблиці та інші об'єкти).
Наприклад, це створить сценарії CREATE для визначених користувачем функцій і збереже їх у файл:
$Database = Get-SqlDatabase -ServerInstance $YourSqlServer -Name $YourDatabaseName
$MyFuncs = $Database.UserDefinedFunctions | Where Schema -eq "dbo"
$MyFuncs.Script() | Out-File -FilePath ".\SqlScripts\MyFunctions.sql"
Якщо ви хочете скопіювати дані та елементи сценарію, такі як індекси, ключі, тригери тощо, вам доведеться вказати варіанти сценаріїв, наприклад:
$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 () не підтримує сценарій даних. Використовуйте EnumScript () для таблиць.
Одна таблиця :
($Database.Tables | Where Name -eq "MyTableName").EnumScript($scriptOptions)
Усі перегляди, зберегти по одному файлу на кожен перегляд, DROP та 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
}
Сподіваюсь, це допомагає.