我有一块动态的sql查询。我想将结果保存在临时表中。但查询返回+100字段,因此我不想手动键入Create table
脚本。
是否可以在Sql Server Management Studio中将过程返回的结果编写到create table脚本中。
所以让我们说在新的查询面板中我执行我的脚本。下面我得到了返回的结果。我正在寻找的选项就像是右键单击结果并选择“脚本到表中”。或类似于您在表格上选择“编辑前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
答案 0 :(得分:2)
一种解决方案可能是在OPENROWSET
函数中执行存储过程,如here所述。
这允许您即时创建表格,例如通过编写:
SELECT * INTO MyTempTable
FROM OPENROWSET('SQLNCLI', 'Server=localhost;Trusted_Connection=yes',
'EXEC myStoredProc')
如果您不想将实际数据放入MyTempTable
,则最后可以添加WHERE 1 = 0
。然后,您可以像任何其他表一样编写MyTempTable脚本。
答案 1 :(得分:2)
如果你使用SSMSBoost工具栏,那么它有一个&#34;脚本网格数据&#34;选项:
答案 2 :(得分:0)
这将创建一个名为NewTable
SELECT *
INTO NewTable
FROM AnotherTable
你可以改变你的动态SQL吗?