从SQL Server的xml元素列表中进行选择

时间:2015-01-29 19:46:04

标签: sql sql-server xml xquery

我们说我有这个xml -

   <book>
      <author>Gambardella, Matthew</author>
      <title>XML Developers Guide</title>
      <genre>Computer</genre>
      <price>44.95</price>
      <publish_date>2000-10-01</publish_date>
      <description>An in-depth look at creating applications 
      with XML.</description>
   </book>
   <book>
      <author>Ralls, Kim</author>
      <title>Midnight Rain</title>
      <genre>Fantasy</genre>
      <price>5.95</price>
      <publish_date>2000-12-16</publish_date>
      <description>A former architect battles corporate zombies, 
      an evil sorceress, and her own childhood to become queen 
      of the world.</description>
   </book>
   <book>
      <author>Corets, Eva</author>
      <title>Maeve Ascendant</title>
      <genre>Fantasy</genre>
      <price>5.95</price>
      <publish_date>2000-11-17</publish_date>
      <description>After the collapse of a nanotechnology 
      society in England, the young survivors lay the 
      foundation for a new society.</description>
   </book>

我需要一个T-SQL查询一次从这个列表中选择一本书,因为在将它插入表之前我需要对它进行某种处理。

我想说我想选择此列表中的第二个元素,并希望将其显示为表格。

我该怎么做?

1 个答案:

答案 0 :(得分:0)

就个人而言,我会先将整个XML文档粉碎成表格,如果我真的不能对它们进行基于集合的操作,则使用行号,循环或游标等方法迭代表格。 / p>

如果您只是明确要访问xml文档的第n个成员,则可以在编写xpath表达式时执行此操作。你怎么知道你需要迭代多少元素,我不确定。这是一个抓住第二本书节点的例子:

--Assumes you've assigned the XML document you provided to an XML variable called @xml
select t.c.value('author[1]', 'varchar(50)')
from @xml.nodes('/book[2]') as t(c)