[英]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'。
您必須在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'調用了擴展存儲過程。
您需要一種解決方法 -將您的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.