簡體   English   中英

在SQL Server中為空時,生成表結構的XML

[英]Generate XML of the Structure of a table when it's empty in SQL Server

我正在嘗試生成一個表,該表包含一行,該行包含存儲過程中每個臨時表的XML。

問題是當表為空時, FOR XML PATH('RS'), root('OR_RS')返回null

我想要的是:當表為空時,返回此表的結構,如下所示:

<OR_RS>
    <ContactCode></ContactCode>
    <EmailPaper></EmailPaper>
    <ShortEmail></ShortEmail>
    <WebSite></WebSite>
    <Providers></Providers>
</OR_RS>  

我試圖做到這一點:

-- ,ISNULL( (SELECT  * FROM #OR_RS FOR XML PATH('RS'), root('OR_RS')), (SELECT ISNULL(ContactCode,'')  , ISNULL(EmailPaper,'') , ISNULL(ShortEmail,'') , ISNULL(WebSite,'')  , ISNULL(Providers,'')  FROM #OR_RS FOR XML RAW)) as OR_RS

但它總是返回Null

 SELECT 1 as Id, (SELECT  * FROM #OR_MK   FOR XML PATH('MK'), root('OR_MK') ) as OR_MK
,(SELECT  * FROM #OR_CA FOR XML PATH('CA'), root('OR_CA') ) as OR_CA 
-- ,ISNULL( (SELECT  * FROM #OR_RS FOR XML PATH('RS'), root('OR_RS')), (SELECT ISNULL(ContactCode,'')  , ISNULL(EmailPaper,'') , ISNULL(ShortEmail,'') , ISNULL(WebSite,'')  , ISNULL(Providers,'')  FROM #OR_RS FOR XML AUTO)) as OR_RS
,(SELECT * FROM #OR_RS FOR XML PATH('RS'), root('OR_RS')) as OR_RS
,(SELECT  * FROM #OR_DC FOR XML PATH('DC'), root('OR_DC') ) as OR_DC
,(SELECT  * FROM #BENEFICIARY FOR XML PATH('BEN'), root('BENEFICIARY') ) as BENEFICIARY
,(SELECT * FROM #MK_REPORT for XML PATH('REP'), root('MK_REPORT')) as MK_REPORT

無論您嘗試如何做...

您可能想看一下sp_describe_first_result_set ,但是,由於這是一個過程,因此將其結果輸入查詢並不容易。

您可以使用技巧( RIGHT JOIN )來強制結果集。 而且,使用ELEMENTS XSINIL可以強制引擎在任何情況下都包括該列。 否則,XML將缺少的元素作為NULL ,因此,否則您的空結果根本不會寫入結果XML中。 嘗試這個:

DECLARE @tbl TABLE(ID INT IDENTITY,SomeValue INT,SomeString VARCHAR(100));

SELECT * 
FROM @tbl
RIGHT JOIN (SELECT 1 AS x) AS tbl ON 1=1
FOR XML RAW, ELEMENTS XSINIL

結果

<row xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <ID xsi:nil="true" />
  <SomeValue xsi:nil="true" />
  <SomeString xsi:nil="true" />
  <x>1</x>
</row>

如果您想了解更多詳情,您可以添加,XMLDATA或者,XMLSCHEMA產生充分的元數據。

暫無
暫無

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

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