Apenas uma atualização: nas versões atuais dos módulos do PowerShell do SQL Server (SQL Server 2014 e diante, eu acreditava. Testado no SSMS 17), a maioria dessas opções são comandos e métodos nativos.
Por exemplo, você pode usar Get-SqlDatabase e métodos como .Script () e .EnumScript (). É realmente útil e simples, especialmente se você deseja uma abordagem mais granular (tabelas específicas e outros objetos).
Por exemplo, isso irá gerar scripts CREATE para funções definidas pelo usuário e salvá-lo no arquivo:
$Database = Get-SqlDatabase -ServerInstance $YourSqlServer -Name $YourDatabaseName
$MyFuncs = $Database.UserDefinedFunctions | Where Schema -eq "dbo"
$MyFuncs.Script() | Out-File -FilePath ".\SqlScripts\MyFunctions.sql"
Se você deseja criar scripts de dados e elementos como índices, chaves, gatilhos, etc., precisará especificar opções de script, como estas:
$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"
Observe que o método Script () não suporta dados de script. Use EnumScript () para tabelas.
Uma única tabela :
($Database.Tables | Where Name -eq "MyTableName").EnumScript($scriptOptions)
Todas as suas visualizações, salve um arquivo por cada visualização, script DROP e 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
}
Espero que isto ajude.