TSQL:FOR XML的每行元素一行

Jae*_*cen 13 t-sql for-xml

我有一个SQL Server 2005查询生成一个大的结果集(最多几千兆字节):

SELECT * FROM Product FOR XML PATH('Product')
Run Code Online (Sandbox Code Playgroud)

运行查询会生成一个包含具有许多产品元素的文档的行:

Row 1:
<Product>
  <Name>Product One</Name>
  <Price>10.00</Price>
</Product>
<Product>
  <Name>Product Two</Name>
  <Price>20.00</Price>
</Product>
...
Run Code Online (Sandbox Code Playgroud)

我想更改查询,以便不是包含具有多个产品元素的单个文档的一行的结果集,而是返回多行,每行包含一个由单个Product元素组成的单个文档:

Row 1:
<Product>
  <Name>Product One</Name>
  <Price>10.00</Price>
</Product>

Row 2:
<Product>
  <Name>Product Two</Name>
  <Price>20.00</Price>
</Product>
Run Code Online (Sandbox Code Playgroud)

最后,我想使用IDataReader从C#中使用此查询,而不使用SQL Server或我的应用程序将整个结果集加载到内存中.我可以对SQL进行任何更改以启用此方案吗?

Cle*_*gic 19

我想你想要这样的东西.(你可以在AdventureWorks上运行以下查询)

SELECT ProductID
      ,( SELECT * FROM Production.Product AS b WHERE a.ProductID= b.ProductID FOR XML PATH('Name') ) AS RowXML
FROM  Production.Product AS a
Run Code Online (Sandbox Code Playgroud)

  • 这是关键:使用FOR XML运行子查询,但不在完整查询中使用FOR XML. (2认同)