SSMS:根据过程的结果创建表脚本

时间:2015-02-12 13:31:51

标签: sql-server ssms

我有一块动态的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    

3 个答案:

答案 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;选项:

enter image description here

答案 2 :(得分:0)

这将创建一个名为NewTable

的表
SELECT *
INTO NewTable
FROM AnotherTable

你可以改变你的动态SQL吗?