Solo una actualización: en las versiones actuales de los módulos PowerShell de SQL Server (SQL Server 2014 y posteriores, creo. Probado en SSMS 17), la mayoría de estas opciones son comandos y métodos nativos.
Por ejemplo, puede usar Get-SqlDatabase y métodos como .Script () y .EnumScript (). Es realmente útil y simple, especialmente si desea un enfoque más granular (tablas específicas y otros objetos).
Por ejemplo, esto generará scripts CREATE para funciones definidas por el usuario y lo guardará en un archivo:
$Database = Get-SqlDatabase -ServerInstance $YourSqlServer -Name $YourDatabaseName
$MyFuncs = $Database.UserDefinedFunctions | Where Schema -eq "dbo"
$MyFuncs.Script() | Out-File -FilePath ".\SqlScripts\MyFunctions.sql"
Si desea escribir datos y elementos como índices, claves, disparadores, etc., deberá especificar las opciones de secuencias de comandos, como esta:
$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"
Tenga en cuenta que el método Script () no admite datos de secuencias de comandos. Use EnumScript () para tablas.
Una sola mesa :
($Database.Tables | Where Name -eq "MyTableName").EnumScript($scriptOptions)
Todas sus vistas, guarde un archivo por cada vista, DROP y 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
}
Espero que esto ayude.