Просто обновление: в текущих версиях модулей PowerShell для 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:
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
}
Надеюсь это поможет.