簡體   English   中英

SQL Server“ for xml”,多個表,多個節點

[英]SQL Server “for xml”, multiple tables, multiple nodes

是否可以一次選擇多個表? 例如,我可以這樣做:

SELECT (
  SELECT * FROM Articles
  FOR XML PATH('article'), TYPE
)
FOR XML PATH('articles'), ROOT('data')

SELECT (
  SELECT * FROM ArticleTypes
  FOR XML PATH('articleType'), TYPE
)
FOR XML PATH('articleTypes'), ROOT('data')

我可以同時加入兩者,以獲得以下輸出嗎? 我不能使用UNION,因為表結構不匹配。

<data>
  <articles>
    <article>...</article>
    ...
  </articles>
  <articleTypes>
    <articleType>...</articleType>
    ...
  </articleTypes>
</data>

聯合中的每一列只有一個列名,並且該列名取自第一個查詢。 您可以通過將另一個表中的列設置為null ,而不是忽略它們。

select *
from (
    select 
        1 as 'Articles/Id'
    ,   'Name' as 'Articles/Name'
    ,   null as 'ArticleType/Id'
    ,   null as 'ArticleType/Type'
) Articles
union all
select *
from (
    select 
        null as 'Articles/Id'
    ,   null as 'Articles/Name'
    ,   1 as 'ArticleType/Id'
    ,   'Type' as 'ArticleType/Type'
) ArticleType
FOR XML PATH(''), ROOT('data')

這導致:

<data>
    <Articles>
        <Id>1</Id>
        <Name>Name</Name>
    </Articles>
    <ArticleType>
        <Id>1</Id>
        <Type>Type</Type>
    </ArticleType>
</data>

根據您使用的SQL Server版本。 這樣的堆棧溢出帖子怎么樣?

使用以下方法可以不列出表中的所有列,不必使用UNION,也不必重復列:

  1. 將所需的數據獲取到臨時表中(在我的情況下,該數據來自使用openquery的其他服務器,因此它更簡單,但是如果行是本地行,則可以跳過)
  2. 通過主控制表和每個主鍵行進行游標:
    • 生成多級XML路徑輸出並將其放入xml變量中
    • 將您的xml變量插入到temp類型為xml的輸出tempXMLOutput表中
  3. 一旦獲取了游標中的所有數據,就會輸出tempXMLOutput表

這將顯示所有數據,而無需重復顯示時髦的列,並且無需花費很長時間進行編碼。

暫無
暫無

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

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