只是一个更新:在当前版本的SQL Server powershell模块中(从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
}
希望这能帮到你。