需要在开放查询中调用Sp。
示例Sp
CREATE PROCEDURE testsp
AS
DECLARE @idoc int,@doc varchar(1000)=
'<OutLookContact>
<Contact FirstName="Asif" LastName="Ghafoor" EmailAddress1="asifghafoor@my.web.pk" />
<Contact FirstName="Rameez" LastName="Ali" EmailAddress1="rameezali@my.web.pk" />
</OutLookContact>'
EXEC sp_xml_preparedocument @idoc OUTPUT, @doc
SELECT *
FROM OPENXML (@idoc, '/OutLookContact/Contact',1)
WITH
(
FirstName varchar(50),
LastName varchar(50),
EmailAddress1 varchar(50)
)
现在执行
SELECT * FROM OPENQUERY ( linkserver,'Exec testsp' )
但它返回错误
错误消息:消息11529,级别16,状态1,过程 sp_describe_first_result_set,第1行元数据不可能 确定因为每个代码路径都会导致错误;见前一个 其中一些错误。 Msg 2812,Level 16,State 62,Procedure 第1行的sp_describe_first_result_set无法找到存储过程 &#39; TESTSP&#39;
答案 0 :(得分:1)
您必须在exec
SELECT * FROM OPENQUERY ( linkserver,'Exec [Database].dbo.testsp' )
但是你会收到一个错误:
Msg 11520,Level 16,State 1,Procedure sp_describe_first_result_set, 第1行无法确定元数据,因为语句'EXEC 过程'testsp'中的sp_xml_preparedocument @idoc OUTPUT,@ doc' 调用扩展存储过程。
您需要一个workaround - 将SP包装到新SP,结果集为:
ALTER PROCEDURE testsp2
AS
EXEC testsp
WITH RESULT SETS
(
(
FirstName nvarchar(max),
LastName nvarchar(max),
EmailAddress1 nvarchar(max)
)
);
并称之为:
SELECT * FROM OPENQUERY ( linkserver,'Exec [Database].dbo.testsp2'
或以这种方式修改您的第一个SP。