【问题标题】:Error Inserting Results into Table from a Stored Procedure with Dynamic SQL使用动态 SQL 将结果从存储过程插入表时出错
【发布时间】: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


【解决方案1】:

你不需要这部分:

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

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

【讨论】:

  • 我试过了,但我仍然得到同样的错误。我在本地立场上运行它。我是 Openrowset 的新手。也不明白链接服务器错误
猜你喜欢
  • 1970-01-01
  • 2020-01-26
  • 2016-12-25
  • 2016-08-20
  • 2018-07-05
  • 2017-01-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多