Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/sql-server-2008/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 有没有办法获取SSMS脚本向导生成的T-SQL?_Sql Server_Sql Server 2008 - Fatal编程技术网

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

Sql server 有没有办法获取SSMS脚本向导生成的T-SQL?,sql-server,sql-server-2008,Sql Server,Sql Server 2008,我正在使用SQLServer2008 我正在尝试编写所有存储过程的脚本,在SSMS中,右键单击我的数据库,然后转到任务->生成脚本,这非常容易。我设定了我的选择,一切都很好 我希望获得脚本向导正在执行的实际T-SQL,这样我就不必每次都要检查并选择所有选项。我只想打开脚本并点击run。是否有方法复制向导本身正在执行的脚本?或者我每次都必须手动完成吗?您可以使用SMO框架使用一个非常简单的powershell脚本来完成这项工作。您需要安装SQLServerManagementStudio,才能使用

我正在使用SQLServer2008

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


我希望获得脚本向导正在执行的实际T-SQL,这样我就不必每次都要检查并选择所有选项。我只想打开脚本并点击run。是否有方法复制向导本身正在执行的脚本?或者我每次都必须手动完成吗?

您可以使用SMO框架使用一个非常简单的powershell脚本来完成这项工作。您需要安装SQLServerManagementStudio,才能使用该框架。您应该进一步研究这一点,但基本框架将是:

[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($_)}
您可能需要更改一些附加选项


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

您可以使用SMO框架使用非常简单的powershell脚本来实现这一点。您需要安装SQLServerManagementStudio,才能使用该框架。您应该进一步研究这一点,但基本框架将是:

[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($_)}
您可能需要更改一些附加选项

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

如果您所追求的是“为所有过程编写脚本”,并且这是一次性的,那么您可以在Management Studio中打开对象资源管理器详细信息,在对象资源管理器中高亮显示存储过程,然后按住Ctrl+a键,右键单击,将脚本设置为>

如果您想要一种稍微自动化一点的方式,市场上有几种模式比较产品,这样您就不必关心ManagementStudio用于为单个对象生成脚本的脚本。作为奖励,同步其他更复杂的对象会容易得多——只要尝试自己为一个表生成脚本,您就会发现这不是一件轻松的事。我在中介绍了许多选项。

如果您所要做的只是“编写所有过程的脚本”,而且这是一次性的,那么您可以在Management Studio中打开对象资源管理器详细信息,在对象资源管理器中高亮显示存储过程,然后按住Ctrl+a键,右键单击,按>编写脚本



如果您想要一种稍微自动化一点的方式,市场上有几种模式比较产品,这样您就不必关心ManagementStudio用于为单个对象生成脚本的脚本。作为奖励,同步其他更复杂的对象会容易得多——只要尝试自己为一个表生成脚本,您就会发现这不是一件轻松的事。我在中查看了许多选项。

运行探查器跟踪。它将向您展示SSMS正在做什么。您是否愿意为此使用一个非常简单的powershell脚本?@JNK如果这是您得到的,请联系我。@Jason Posted,如果您需要更多帮助,请告诉我。这其实很直观。运行探查器跟踪。它将向您展示SSMS正在做什么。您是否愿意为此使用一个非常简单的powershell脚本?@JNK如果这是您得到的,请联系我。@Jason Posted,如果您需要更多帮助,请告诉我。这其实很直观。不确定你是否已经尝试过PS,但效果很好,Aaron。它将处理依赖项和您可能需要的所有其他内容。如果您有兴趣,请告诉我,我可以给您发送一些示例脚本。@JNK用于
CREATE TABLE
,其中包含列约束、默认值、触发器、别名类型等。?权限如何?我的观点是,您可以使用PowerShell自己完成这项工作,但要正确完成这项工作需要付出大量的努力(除非您的表格非常简单)。@JNK我很乐意弄错,PS可能会很好地处理我所能预见的所有细微差别。另一个复杂问题是:如果某些对象已经存在于目标位置,并且处于相同或不同的状态,该怎么办?我怀疑PS将无法比较两个数据库和编写增量脚本(这可能是本练习中最乏味的部分)。假设在SSM中可以做的任何事情都可以在SMO和PS中做。但是,对于更多的比较,它确实会变得有点棘手。我不建议重写SQL比较,但是你可以很容易地做一些很酷的事情。毫无疑问。不是说PS不是一个很好的游戏方式,或者你不能在这里做任何事情,或者更多,只是覆盖所有的基础会变得越来越乏味。不确定你是否已经尝试过PS,但它很有效,Aaron。它将处理依赖项和您可能需要的所有其他内容。如果您有兴趣,请告诉我,我可以给您发送一些示例脚本。@JNK用于
CREATE TABLE
,其中包含列约束、默认值、触发器、别名类型等。?权限如何?我的观点是,您可以使用PowerShell自己完成这项工作,但要正确完成这项工作需要付出大量的努力(除非您的表格非常简单)。@JNK我很乐意弄错,PS可能会很好地处理我所能预见的所有细微差别。另一个复杂问题是:如果某些对象已经存在于目标位置,并且处于相同或不同的状态,该怎么办?我怀疑PS将无法比较两个数据库和编写增量脚本(这可能是本练习中最乏味的部分)。假设在SSM中可以做的任何事情都可以在SMO和PS中做。但是,对于更多的比较,它确实会变得有点棘手。我不建议重写SQL比较,但是你可以很容易地做一些很酷的事情。毫无疑问。这并不是说PS不是一个很好的游戏方式,或者你不能在这里做任何事情,或者更多,只是说覆盖所有的基地会变得越来越乏味。