使用动态SQL从存储过程将结果插入表中时出错

时间:2014-12-26 17:57:11

标签: sql sql-server stored-procedures pivot

我有一个执行动态数据透视任务的存储过程。我希望将此过程的结果加载到表中。该表可以在加载之前清空/删除。

这是我用于任务的代码。但是我收到以下错误。

Dynamic Pivot Error in sql server

配置选项'show advanced options'从1更改为1.运行RECONFIGURE语句进行安装。

配置选项'Ad Hoc Distributed Queries'从1更改为1.运行RECONFIGURE语句进行安装。

消息11514,级别16,状态1,过程sp_describe_first_result_set,第1行 无法确定元数据,因为语句'exec sp_executesql @query;'在过程'DynamicPivotProcedure'中包含动态SQL。请考虑使用WITH RESULT SETS子句明确描述结果集

代码:

create procedure dbname.schemaname.DynamicPivotProcedure 
as
begin
DECLARE @cols  AS NVARCHAR(MAX),
        @query AS NVARCHAR(MAX)

SELECT @cols = Stuff((SELECT ',' + Quotename([check])
                      FROM   TEST
                      GROUP  BY [Check]
                      FOR XML PATH(''), TYPE).value('.', 'NVARCHAR(MAX)'), 1, 1, '')

SET @query = N'SELECT ID, [Total Of Score],' + @cols + N' from 
             (SELECT TEST.[ID],
                     Score,
                     [check],
                     [Total Of Score] = Count(TEST.Score) over(partition by [ID], [score], [check])
             FROM TEST) T
            pivot 
            (
             SUM (T.[score])
             for T.[check] in (' + @cols + N') ) p '

EXEC Sp_executesql @query; 
end

go
sp_configure 'Show Advanced Options', 1
GO
RECONFIGURE
GO
sp_configure 'Ad Hoc Distributed Queries', 1
GO
RECONFIGURE
GO

IF OBJECT_ID('tempdb..#MyTempTable') IS NOT NULL 
begin
DROP TABLE #MyTempTable

end

SELECT * INTO #MyTempTable FROM 
OPENROWSET('SQLNCLI', 'Server= ABC124;Trusted_Connection=yes;',
     'EXEC DATABASE.Schemaname.DynamicPivotProcedure')

SELECT * FROM #MyTempTable

1 个答案:

答案 0 :(得分:0)

您不需要此部分:



    go
sp_configure 'Show Advanced Options', 1
GO
RECONFIGURE
GO
sp_configure 'Ad Hoc Distributed Queries', 1
GO
RECONFIGURE
GO




下面的错误看起来像连接错误。 SSMS无法连接到您的SQLServer instamce。打开一个新的SSMS,连接到SQL服务器,打开一个新查询并粘贴上面的代码(没有sp_configure部分)