简体   繁体   English

在SQL中选择所有XML属性

[英]Select all XML attributes in SQL

I have an XML value list contained in a SQL Table Field that looks like so: 我有一个SQL表字段中包含的XML值列表,如下所示:

<valuelist xmlns="" name="VL_IncCompCondVL">
  <li value="BL" item="BLOCKED" />
  <li value="NK" item="NO KEY" />
  <li value="FL" item="FLOODED" />
  <li value="TD" item="TORN DOWN" />
  <li value="UL" item="UNABLE TO LOCATE" />
</valuelist>

I want to be able to create a temp SQL table like so: 我希望能够像这样创建一个临时SQL表:

CREATE TABLE #incompleteCode
(
value nvarchar(2),
item nvarchar(20)
)

and populate it with all the values/items from the XML so that I can use the temp table to JOIN with another SELECT statement. 并使用XML中的所有值/项填充它,以便我可以使用临时表与另一个SELECT语句进行JOIN。

SELECT Data.value('(/valuelist/li/@item)[1]', 'nvarchar(50)') AS Item
                                                    FROM ValueList
                                                    WHERE Name = 'VL_IncCompCondVL'

That statement gets me the first one, and if i increment [1] to [2] and so on, i can 1 by 1 select each attribute. 那个语句让我第一个,如果我将[1]增加到[2],依此类推,我可以逐个选择每个属性。 But I have to believe there's a way to just get them all. 但我必须相信有一种方法可以让他们全部。 I've tried some variations and am just not figuring it out. 我尝试了一些变化,我只是没有搞清楚。 I think I need to use the * wildcard somewhere. 我想我需要在某个地方使用*通配符。

You should use the nodes method: 您应该使用nodes方法:

SELECT 
  item.value('.', 'nvarchar(50)') 
FROM 
  ValueList 
  CROSS APPLY data.nodes('/valuelist/li/@item') as T2(item) 
where 
  name='VL_IncCompCondVL'

See here about CROSS APPLY 在这里看到CROSS APPLY

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM