我正在尝试从存储过程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
答案 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'')')
的解决方案