有没有办法获得SSMS脚本向导生成的T-SQL?

时间:2012-03-05 21:13:09

标签: sql-server sql-server-2008

我正在使用SQL Server 2008。

我正在尝试编写所有存储过程的脚本,通过右键单击我的数据库,然后转到任务 - >,这很容易在SSMS中完成。生成脚本。我设定了选项,一切都很好。

我想获得脚本向导正在执行的实际T-SQL,这样我就不必每次都想要执行所有选项。我想打开脚本并点击运行。有没有办法复制向导本身正在执行的脚本?或者我每次都必须手动完成?

2 个答案:

答案 0 :(得分:1)

您可以使用SMO Framework使用非常简单的PowerShell脚本执行此操作。您需要安装SQL Server Management Studio才能获取框架。您应该进一步研究这个问题,但基本框架将是:

[Void][System.Reflection.Assembly]::LoadWithPartialName("Microsoft.SqlServer.SMO")

$srv = new-object "Microsoft.SqlServer.Management.SMO.Server" 'MyServer'

$db = New-Object "Microsoft.SqlServer.Management.SMO.Database"
$db = $srv.Databases['MyDatabase']

$scr = New-Object "Microsoft.SqlServer.Management.Smo.Scripter"
$scr.Server = $srv

$scr.options.filename = 'C:\SomeFolder\MyExports.SQL'

$db.StoredProcedures | where-object {$_.IsSystemObject -eq $False} | %{$scr.Script($_)}

您可能需要更改一些其他选项。 MSDN has a pretty thorough overview of the framework here.

基本上,上面会将数据库中的所有存储过程编写为您指定的任何文件。 SMO是SSMS使用的框架,因此它应该是相同的。

答案 1 :(得分:0)

如果您只是“脚本所有程序”,并且这是一次性的事情,您可以在Management Studio中打开对象资源管理器详细信息,在对象资源管理器中突出显示存储过程,然后按Ctrl + A,右键单击,脚本为> ...

如果您想要更加自动化的方式,市场上有几种架构比较产品,这样您就不必关心Management Studio用于为单个对象生成脚本的脚本。作为奖励,同步其他更复杂的对象会更容易 - 只是尝试自己生成一个表的脚本,你会发现它不是野餐。我在this blog post中查看了许多选项。