选择SQL中的所有XML属性
我有一个包含在SQL表字段中的XML值列表,如下所示:选择SQL中的所有XML属性,sql,sql-server,xml,xpath,Sql,Sql Server,Xml,Xpath,我有一个包含在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" /> <
<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>
并用XML中的所有值/项填充它,以便我可以使用temp表与另一个SELECT语句连接
SELECT Data.value('(/valuelist/li/@item)[1]', 'nvarchar(50)') AS Item
FROM ValueList
WHERE Name = 'VL_IncCompCondVL'
该语句得到第一个属性,如果我将[1]增加到[2],依此类推,我可以逐个选择每个属性。但我必须相信有一种方法可以把它们都弄到手。我试过一些变化,只是没有弄明白。我想我需要在某个地方使用*通配符。您应该使用以下方法:
请参阅关于交叉应用的内容我不知道它是如何工作的,但它确实有效。而SQL管理工作室中的intellisense也没有。它混淆了item.value和data.nodes。我必须去研究节点方法。非常感谢你!
SELECT Data.value('(/valuelist/li/@item)[1]', 'nvarchar(50)') AS Item
FROM ValueList
WHERE Name = 'VL_IncCompCondVL'
SELECT
item.value('.', 'nvarchar(50)')
FROM
ValueList
CROSS APPLY data.nodes('/valuelist/li/@item') as T2(item)
where
name='VL_IncCompCondVL'