【发布时间】:2015-02-15 03:13:18
【问题描述】:
我有一段动态 sql 查询。我想将结果保存在临时表中。但是查询返回 +100 个字段,所以我不想手动输入 Create table 脚本。
是否可以在 Sql Server Management Studio 中将过程返回的结果脚本化到创建表脚本中。
假设我在一个新的查询面板中执行我的脚本。下面我得到返回的结果。我正在寻找的选项类似于例如右键单击结果并选择“脚本到表中”。或者类似于您在表上选择“编辑前 200 行”然后在返回的结果中右键单击 -> 窗格 -> 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
【问题讨论】:
-
您可能会发现这很有帮助stackoverflow.com/questions/8805275/…
-
是的,在我提出问题之前,我一直在检查那个。不幸的是,如果可能的话,我必须依赖免费工具。我将把它添加到问题中。至于其他建议,我宁愿避免手动输入表格列。
-
也许你可以改变你的动态 sql 查询来插入临时表?
-
@jpw 是否可以不手动声明临时表?我不会避免输入所有 +100 列。
-
@jpw 我已经添加了相关过程的模拟版本。
标签: sql-server ssms