【发布时间】:2014-12-26 17:57:10
【问题描述】:
我有一个执行动态数据透视任务的存储过程。我希望将此过程的结果加载到表中。该表可以在加载之前清空/删除。
这是我用于该任务的代码。但我收到以下错误。
Dynamic Pivot Error in sql server
配置选项“显示高级选项”从 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
【问题讨论】:
-
@nodisplayname 我贴出来了
-
'(local)\SQL2008'这是您的实例或服务器名称。 @@servername 的结果是什么。 -
@NoDisplayName 我编辑了这个问题。我使用了@@servername 并得到了同样的错误
-
No dude 运行这个
select @@ServerName你会得到一个你需要的结果 在Server=....中使用这个结果 -
不应该是
EXEC DATABASE.DynamicPivotProcedure,应该是EXEC DATABASEName.SchemaName.DynamicPivotProcedure
标签: sql sql-server stored-procedures pivot