2016-04-26 3 views
1

Я пытаюсь привести данные из хранимой процедуры CTE. Теперь, поскольку моя хранимая процедура использует OPEN EXEC, я обнаружил, что единственным способом работы является использование OPENROWSET. Так что мой предназначен код выглядит следующим образом:метаданные не определены исключение при использовании 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, но он не работает знает кто-либо хак вокруг этого, который работает

FYI: Ниже решение не будет работать, потому что в этом случае я буду иметь зависимость от моей хранимой процедуры. Я не хочу редактировать этот скрипт всякий раз, когда происходит смена SP. How to get results of stored procedure #1 into a temporary table in stored procedure #2

ответ

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