Select xml 格式的数据使用 FOR XML
Select data in xml format using FOR XML
我正在以 xml 格式向 select 某些列写入查询。
样本
我有如下数据
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>
但我想使用 link #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>
有什么办法可以实现吗?
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;
试试这个,
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;
我正在以 xml 格式向 select 某些列写入查询。
样本
我有如下数据
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>
但我想使用 link #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>
有什么办法可以实现吗?
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;
试试这个,
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;