SSMS:根据过程的结果创建 table 脚本
SSMS: Create a table script from results of a procedure
我有一段动态 sql 查询。我想将结果保存在临时 table 中。但是查询 returns +100 个字段,所以我不想手动输入 Create table
脚本。
是否可以在 Sql Server Management Studio 中将过程返回的结果编写成脚本,写入到创建 table 脚本中。
假设我在一个新的查询面板中执行我的脚本。下面我得到返回的结果。我正在寻找的选项类似于例如右键单击结果并 selecting "Script into a table"。或者类似于在 table 上 select "Edit top 200 rows" 然后在返回结果中右键单击 -> 窗格 -> SQL 你可以编辑SQL 即生成结果。
对于过程的结果,SSMS 中是否可能有类似的东西?如果需要外部工具,有没有免费的?我正在使用 SQL Server 2012 和 SSMS 2012。一些适用于以前版本的工具已获得 2012 的许可。
下面是程序中核心代码的一些模拟版本:
exec dbo.spDynamic
@ID ,
@ID2 ,
@Parameters ,
@prefixLogic,
@selectprefix,
@selectsuffix,
@Table_1,
@Function_1,
@SelectExtra_1,
@Where_1,
@Function_2,
@SelectExtra_2,
@Where_2,
@On,
@finalWhere
@tempSchema
@tempTable
@tempWhere
这是 spDynamic 的重要部分:
Declare @sql nvarchar(max)
set @sql =
+ @parameterLogic
+ ' ' + @prefixlogic
+ @selectprefix
+ ' SELECT ' + @DeltaLogic
+ ' FROM ( Select * ' + Case When @ID < 0 Then Replace(@SelectExtra_1, '<ID>', CAST(@ID AS nvarchar))
When @ID = 0 Then Replace(@SelectExtra_2, '<ID>', CAST(@ID AS nvarchar))
Else Replace(@Table_1, '<ID>', CAST(@ID AS nvarchar)) End
+ ' From ' + Case When @ID < 0 Then @Function_1 + ' ' + @Where_1
When @ID = 0 Then @Function_2 + ' ' + @Where_2
Else @tempSchema + @tempTable
+ ' ' + Replace(@tempWhere, '<ID>', CAST(@ID AS nvarchar)) End
+ ' ) A '
+ ' FULL OUTER JOIN '
+ ' ( Select * ' + Case When @ID2 < 0 Then Replace(@SelectExtra_1, '<ID>', CAST(@ID2 AS nvarchar))
When @ID2 = 0 Then Replace(@SelectExtra_2, '<ID>', CAST(@ID2 AS nvarchar))
Else Replace(@Table_1, '<ID>', CAST(@ID2 AS nvarchar)) End
+ ' From ' + Case When @ID2 < 0 Then @Function_1 + ' ' + @Where_1
When @ID2 = 0 Then @Function_2 + ' ' + @Where_2
Else @tempSchema + @tempTable
+ ' ' + Replace(@tempWhere, '<ID>', CAST(@ID2 AS nvarchar)) End
+ ' ) B ' + @on
+ @finalWhere
+ @selectsuffix
exec sp_sqlexec @sql
这将创建一个名为 NewTable
的 table
SELECT *
INTO NewTable
FROM AnotherTable
你可以改变你的动态 SQL 来做到这一点吗?
一种解决方案是在 OPENROWSET
函数内执行存储过程,如 here 所述。
这允许您即时创建 table,例如通过编写:
SELECT * INTO MyTempTable
FROM OPENROWSET('SQLNCLI', 'Server=localhost;Trusted_Connection=yes',
'EXEC myStoredProc')
如果您不想将实际数据放入 MyTempTable
,您可以在末尾添加 WHERE 1 = 0
。之后,您可以像编写任何其他脚本一样编写 MyTempTable table.
如果您使用 SSMSBoost 工具栏,那么它有一个 "script grid data" 选项:
我有一段动态 sql 查询。我想将结果保存在临时 table 中。但是查询 returns +100 个字段,所以我不想手动输入 Create table
脚本。
是否可以在 Sql Server Management Studio 中将过程返回的结果编写成脚本,写入到创建 table 脚本中。
假设我在一个新的查询面板中执行我的脚本。下面我得到返回的结果。我正在寻找的选项类似于例如右键单击结果并 selecting "Script into a table"。或者类似于在 table 上 select "Edit top 200 rows" 然后在返回结果中右键单击 -> 窗格 -> SQL 你可以编辑SQL 即生成结果。
对于过程的结果,SSMS 中是否可能有类似的东西?如果需要外部工具,有没有免费的?我正在使用 SQL Server 2012 和 SSMS 2012。一些适用于以前版本的工具已获得 2012 的许可。
下面是程序中核心代码的一些模拟版本:
exec dbo.spDynamic
@ID ,
@ID2 ,
@Parameters ,
@prefixLogic,
@selectprefix,
@selectsuffix,
@Table_1,
@Function_1,
@SelectExtra_1,
@Where_1,
@Function_2,
@SelectExtra_2,
@Where_2,
@On,
@finalWhere
@tempSchema
@tempTable
@tempWhere
这是 spDynamic 的重要部分:
Declare @sql nvarchar(max)
set @sql =
+ @parameterLogic
+ ' ' + @prefixlogic
+ @selectprefix
+ ' SELECT ' + @DeltaLogic
+ ' FROM ( Select * ' + Case When @ID < 0 Then Replace(@SelectExtra_1, '<ID>', CAST(@ID AS nvarchar))
When @ID = 0 Then Replace(@SelectExtra_2, '<ID>', CAST(@ID AS nvarchar))
Else Replace(@Table_1, '<ID>', CAST(@ID AS nvarchar)) End
+ ' From ' + Case When @ID < 0 Then @Function_1 + ' ' + @Where_1
When @ID = 0 Then @Function_2 + ' ' + @Where_2
Else @tempSchema + @tempTable
+ ' ' + Replace(@tempWhere, '<ID>', CAST(@ID AS nvarchar)) End
+ ' ) A '
+ ' FULL OUTER JOIN '
+ ' ( Select * ' + Case When @ID2 < 0 Then Replace(@SelectExtra_1, '<ID>', CAST(@ID2 AS nvarchar))
When @ID2 = 0 Then Replace(@SelectExtra_2, '<ID>', CAST(@ID2 AS nvarchar))
Else Replace(@Table_1, '<ID>', CAST(@ID2 AS nvarchar)) End
+ ' From ' + Case When @ID2 < 0 Then @Function_1 + ' ' + @Where_1
When @ID2 = 0 Then @Function_2 + ' ' + @Where_2
Else @tempSchema + @tempTable
+ ' ' + Replace(@tempWhere, '<ID>', CAST(@ID2 AS nvarchar)) End
+ ' ) B ' + @on
+ @finalWhere
+ @selectsuffix
exec sp_sqlexec @sql
这将创建一个名为 NewTable
SELECT *
INTO NewTable
FROM AnotherTable
你可以改变你的动态 SQL 来做到这一点吗?
一种解决方案是在 OPENROWSET
函数内执行存储过程,如 here 所述。
这允许您即时创建 table,例如通过编写:
SELECT * INTO MyTempTable
FROM OPENROWSET('SQLNCLI', 'Server=localhost;Trusted_Connection=yes',
'EXEC myStoredProc')
如果您不想将实际数据放入 MyTempTable
,您可以在末尾添加 WHERE 1 = 0
。之后,您可以像编写任何其他脚本一样编写 MyTempTable table.
如果您使用 SSMSBoost 工具栏,那么它有一个 "script grid data" 选项: