nit*_*f50 9 xml sql sql-server 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" />
<li value="UL" item="UNABLE TO LOCATE" />
</valuelist>
Run Code Online (Sandbox Code Playgroud)
我希望能够像这样创建一个临时SQL表:
CREATE TABLE #incompleteCode
(
value nvarchar(2),
item nvarchar(20)
)
Run Code Online (Sandbox Code Playgroud)
并使用XML中的所有值/项填充它,以便我可以使用临时表与另一个SELECT语句进行JOIN.
SELECT Data.value('(/valuelist/li/@item)[1]', 'nvarchar(50)') AS Item
FROM ValueList
WHERE Name = 'VL_IncCompCondVL'
Run Code Online (Sandbox Code Playgroud)
那个语句让我第一个,如果我将[1]增加到[2],依此类推,我可以逐个选择每个属性.但我必须相信有一种方法可以让他们全部.我尝试了一些变化,我只是没有搞清楚.我想我需要在某个地方使用*通配符.
你应该使用这个nodes
方法:
SELECT
item.value('.', 'nvarchar(50)')
FROM
ValueList
CROSS APPLY data.nodes('/valuelist/li/@item') as T2(item)
where
name='VL_IncCompCondVL'
Run Code Online (Sandbox Code Playgroud)
见这里约CROSS APPLY