tri*_*nes 1 xml sql sql-server xquery
我在表中有一个简单的XML字段,该表在其节点内存储一个或多个值:
<MultiSelect>
<ItemKey>38</ItemKey>
<ItemKey>36</ItemKey>
</MultiSelect>
Run Code Online (Sandbox Code Playgroud)
如何以将这些值提取到结果中的列的方式查询此字段?
源数据:
RowKey Format
-----------------
1 <MultiSelect><ItemKey>40</ItemKey></MultiSelect>
2 <MultiSelect><ItemKey>40</ItemKey><ItemKey>36</ItemKey></MultiSelect>
Run Code Online (Sandbox Code Playgroud)
追求结果:
RowKey ItemKey
----------------
1 40
2 40
2 36
Run Code Online (Sandbox Code Playgroud)
我已经接近要在下面的查询中使用的位置,但这仅返回XML节点的名称,而不是其中的值:
SELECT
[RowKey],
x.y.value('local-name(.)', 'varchar(max)') AS ItemKey
FROM
[tbl_MyDataTable] AS t
cross apply t.[Format].nodes('MultiSelect/ItemKey') x(y)
Run Code Online (Sandbox Code Playgroud)
结果:
RowKey ItemKey
----------------
1 ItemKey
2 ItemKey
2 ItemKey
Run Code Online (Sandbox Code Playgroud)
任何建议都可以收到!
您接近了-尝试一下(由于这些都是INT数值,我建议INT您在XQuery中使用):
SELECT
[RowKey],
x.y.value('(.)[1]', 'INT') AS ItemKey
FROM
dbo.[tbl_MyDataTable] AS t
CROSS APPLY
t.[Format].nodes('/MultiSelect/ItemKey') x(y)
Run Code Online (Sandbox Code Playgroud)
基本上,通过选择(.)[1],您可以选择节点的值 -而不是名称(即ItemKey)