使用OPENROWSET时元数据未定义异常

时间:2016-04-26 17:22:58

标签: sql sql-server tsql ssis-2012

我正在尝试从存储过程CTE中提取数据。既然我的存储过程使用OPEN EXEC,我发现唯一有效的方法是使用OPENROWSET。 所以我想要的代码如下所示:

;with xyz AS
(
select a.* 
from openrowset('SQLNCLI','Server=(local);Trusted_Connection=yes;',
    'EXEC   [dbo].[usp_GetPayroll]
        @StartDate = "1/1/2016",
        @EndDate =  "4/1/2016",
        @OrganizationID = 183,
AS a
)
select * from xyz

所以,当我尝试做这件事时,我得到以下错误

Msg 11512, Level 16, State 1, Procedure sp_describe_first_result_set, Line 1
The metadata could not be determined because the statement 'WITH EnrollmentChanges AS
    (

我做了一些研究,发现当你使用OPENROWSET时,它只会返回第一行的元数据。 我读了一些关于FMTONLY设置的内容,但它不起作用 有人知道任何有效的黑客行为

仅供参考:以下解决方案不起作用,因为在这种情况下,我将依赖于我的存储过程。每当SP发生变化时,我都不想编辑这个脚本。 How to get results of stored procedure #1 into a temporary table in stored procedure #2

1 个答案:

答案 0 :(得分:0)

您是否尝试使用第二个EXEC(..)语句包装查询?正如您可以在MSDN中阅读:

  

EXECUTE语句可用于向其发送传递命令   链接服务器。另外,字符串或命令的上下文   执行时可以明确设置。

请参阅以下示例:

USE Test1
GO
CREATE PROCEDURE Proc1
AS
BEGIN
    SELECT 'A', 1
    UNION ALL
    SELECT 'B', 2
END
GO
sp_configure 'show advanced options', 1;
RECONFIGURE;
GO
sp_configure 'Ad Hoc Distributed Queries', 1;
RECONFIGURE;
GO
Proc1
GO
SELECT * FROM OPENROWSET('SQLNCLI', 'server=.\SQL2014;trusted_connection=yes','EXEC(''EXEC Test1.dbo.Proc1'')')
--OR SELECT * FROM OPENROWSET('SQLNCLI', 'server=.\SQL2014;trusted_connection=yes','EXEC(''Test1.dbo.Proc1'')')

来自dev.cdur.pl

的解决方案