【问题标题】:Select data in xml format using FOR XML使用 FOR XML 选择 xml 格式的数据
【发布时间】:2016-08-05 11:53:04
【问题描述】:

我正在编写查询以选择一些 xml 格式的列。

样本

我有如下数据

Create Table #Master(Id int, Name varchar(100))

Insert Into #Master
Values(1,'Item1'),(2,'Item2')


Create Table #Sub(SubId int,MasteId int, SubName varchar(100))

Insert Into #Sub
Values(1,1,'SubItem1'),(2,1,'SubItem2')

目前正在编写如下查询

Select *
From #Master as Main
FOR XML AUTO, ROOT ('ItemGroup'), ELEMENTS  XSINIL;

如下拉取xml

<ItemGroup xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <Main>
    <Id>1</Id>
    <Name>Item1</Name>
  </Main>
  <Main>
    <Id>2</Id>
    <Name>Item2</Name>
  </Main>
</ItemGroup>

但我想使用链接#Master 和#Sub 将子项目带入每个主项目的单独注释中,这样它会生成如下所示的内容

<ItemGroup xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <Main>
    <Id>1</Id>
    <Name>Item1</Name>
    <SubItems>
      <subitem>
        <subid>1</subid>
        <masterid>1</masterid>
        <subname>SubItem1</subname>
      </subitem>
      <subitem>
        <subid>2</subid>
        <masterid>1</masterid>
        <subname>SubItem2</subname>
      </subitem>
    </SubItems>
  </Main>
  <Main>
    <Id>2</Id>
    <Name>Item2</Name>
  </Main>
</ItemGroup>

有什么方法可以实现吗?

【问题讨论】:

    标签: sql-server xml sql-server-2012 for-xml


    【解决方案1】:
    SELECT
        *,
        (
            SELECT *
            FROM #Sub AS subitem
            WHERE subitem.MasteId = Main.Id
            FOR XML AUTO, ELEMENTS, TYPE 
        ) AS SubItems
    From #Master as Main
    FOR XML AUTO, ROOT ('ItemGroup'), ELEMENTS XSINIL;
    

    【讨论】:

      【解决方案2】:

      试试这个,

      Select *, (Select *
                  From #Sub as s
                  WHERE s.MasteId = Main.Id
                  FOR XML PATH('subitem'), TYPE ) SubItems
      From #Master as Main
      FOR XML AUTO, ROOT ('ItemGroup'), ELEMENTS  XSINIL;
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2021-04-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-03-03
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多