XML节点中tsql where子句的xquery等价物

XML节点中tsql where子句的xquery等价物,xml,tsql,sql-server-2005,xquery,Xml,Tsql,Sql Server 2005,Xquery,我正在尝试分解具有不寻常布局的XML文件,因为项目不是以常规元素和属性排列的,而是以一种“XML中的列表”格式排列的: 所以,如果我想看看这个人选择了什么水果,那么我希望输出是这样的: listRef, name, Fruit List1, Test list items, Apple 明亮的谢谢你,迈克。这100%有效,我可以通过在底部添加交叉应用来扩展字段列表。这正是我需要的。后续问题:我已经用了一年多了,没有一个问题。但现在升级到SQL2008 R

我正在尝试分解具有不寻常布局的XML文件,因为项目不是以常规元素和属性排列的,而是以一种“XML中的列表”格式排列的:

所以,如果我想看看这个人选择了什么水果,那么我希望输出是这样的:

listRef, name,                Fruit 
List1,   Test list items,   Apple

明亮的谢谢你,迈克。这100%有效,我可以通过在底部添加交叉应用来扩展字段列表。这正是我需要的。后续问题:我已经用了一年多了,没有一个问题。但现在升级到SQL2008 R2,在SSIS中测试脚本时抛出了一个错误:“查询处理器耗尽了内部资源,无法生成查询计划。这是一个罕见的事件,仅适用于非常复杂的查询或引用大量表或分区的查询。请简化查询。”我已经把它精确地定位到一个有12个交叉应用的选择中,所以我推测它对此不满意。有什么办法可以解决这个问题吗?…同时我把上面的内容分成了两个单独的批次,这样交叉应用就少了。@brynn我从来没有见过这种情况。如果您可以将xml和查询作为一个问题发布,我很想看一看。如果你添加了一个问题,请在这里通知我,并链接到它!谢谢你,迈克。这100%有效,我可以通过在底部添加交叉应用来扩展字段列表。这正是我需要的。后续问题:我已经用了一年多了,没有一个问题。但现在升级到SQL2008 R2,在SSIS中测试脚本时抛出了一个错误:“查询处理器耗尽了内部资源,无法生成查询计划。这是一个罕见的事件,仅适用于非常复杂的查询或引用大量表或分区的查询。请简化查询。”我已经把它精确地定位到一个有12个交叉应用的选择中,所以我推测它对此不满意。有什么办法可以解决这个问题吗?…同时我把上面的内容分成了两个单独的批次,这样交叉应用就少了。@brynn我从来没有见过这种情况。如果您可以将xml和查询作为一个问题发布,我很想看一看。如果您添加了一个问题,请在此处通知我,并提供链接
DECLARE @x xml 
 SET @x = 
(   SELECT xml_data_column   
   FROM dbo.Table   
 WHERE xmlFileName = 'D:\XML_list.xml'); 

;WITH XMLNAMESPACES('urn:Listing' AS ns) 
SELECT t.c.value('../ns:listRef[1]', 'varchar(20)') listRef  
, t.c.value('../ns:name[1]', 'varchar(20)') name  
, t.c.value('/.', 'varchar(30)') ext1b
, t.c.value('ns:extendedField[1]/ns:name[1]', 'varchar(30)') name1
, t.c.value('ns:extendedField[1]/ns:data[1]', 'varchar(30)') data1
, t.c.value('ns:extendedField[2]/ns:name[1]', 'varchar(30)') name2
, t.c.value('ns:extendedField[2]/ns:data[1]', 'varchar(30)') data2
, t.c.value('ns:extendedField[3]/ns:name[1]', 'varchar(30)') name3
, t.c.value('ns:extendedField[3]/ns:data[1]', 'varchar(30)') data3
FROM  @x.nodes('//ns:Lists/ns:items/ns:extendedFields[1]') AS t(c)
listRef, name,                Fruit 
List1,   Test list items,   Apple
with xmlnamespaces('urn:Listing' AS ns)
select L.X.value('ns:listRef[1]', 'varchar(20)') as listRef,
       L.X.value('ns:name[1]', 'varchar(20)') as name,
       E.X.value('ns:data[1]', 'varchar(30)') as Fruit
from @x.nodes('//ns:Lists/ns:items') as L(X)
  cross apply L.X.nodes('ns:extendedFields/ns:extendedField[ns:name = "Fruit"]') as E(X)