任何获取SSMS脚本向导生成的T-SQL的方法



我使用的是SQL Server 2008。

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

我想得到脚本向导正在执行的实际T-SQL,这样我就不必每次都浏览并选择所有选项。我只想打开脚本并点击运行。有没有办法复制向导本身正在执行的脚本?还是每次都必须手动操作?

您可以使用SMO框架使用一个非常简单的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:SomeFolderMyExports.SQL'
$db.StoredProcedures | where-object {$_.IsSystemObject -eq $False} | %{$scr.Script($_)}

您可能需要更改一些附加选项。MSDN在这里对这个框架有一个相当全面的概述。

从本质上讲,上面将把数据库中存储的所有proc脚本化为您指定的任何文件。SMO是SSMS使用的框架,因此它应该是相同的。

如果你想要的只是"编写所有过程的脚本",并且这是一次性的,你可以在Management Studio中打开对象资源管理器详细信息,在对象资源管理中突出显示存储过程,然后Ctrl+a,右键单击,编写为>。。。

如果您想要一种稍微自动化的方式,市场上有几种模式比较产品,这样您就不必关心Management Studio用于为单个对象生成脚本的脚本。另外,同步其他更复杂的对象会容易得多——只需尝试自己为表生成脚本,你就会发现这绝非易事。我在这篇博客文章中介绍了许多选项。

最新更新