簡體   English   中英

sp_xml_preparedocument無法在openquery語句中返回? (無法確定元數據)

[英]sp_xml_preparedocument fails to return in openquery statement? (The metadata could not be determined)

需要在開放式查詢中調用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行無法確定元數據,因為每個代碼路徑均會導致錯誤;因此,請執行以下操作: 請參閱先前的錯誤。 消息2812,級別16,狀態62,過程sp_describe_first_result_set,第1行找不到存儲過程'testsp'。

  1. 您必須在exec指定數據庫名稱和架構名稱

     SELECT * FROM OPENQUERY ( linkserver,'Exec [Database].dbo.testsp' ) 

    但是你會得到一個錯誤:

消息11520,級別16,狀態1,過程sp_describe_first_result_set,行1無法確定元數據,因為過程'testsp'中的語句'EXEC sp_xml_preparedocument @idoc OUTPUT,@doc'調用了擴展存儲過程。

  1. 您需要一種解決方法 -將您的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。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM