0

下面的代码只返回 6 行,只有第一个值。我想要 6 行有各自的值

    DECLARE @txml XML 
    SET @txml ='
    <row ch="&#x9;" unicode_value="9" cnt="3" />
    <row ch="&#xA;" unicode_value="10" cnt="5" />
    <row ch="&#xD;" unicode_value="13" cnt="5" />
    <row ch=" " unicode_value="32" cnt="962" />
    <row ch="&amp;" unicode_value="38" cnt="32" />
    <row ch="(" unicode_value="40" cnt="8" />
    '
    SELECT x.value('(/row/@cnt)[1]', 'int') AS cnt
    FROM  @txml.nodes('/row') AS tbl( x )
4

1 回答 1

1

您正在获取第一项值,因为这就是您的 XPath 表达式的定义方式:'(row/@cnt)[1]'

[1]第一次出现匹配row/@cnt表达式的状态,cnt从第一个<row>元素获取属性值。

将您的查询更改为:

SELECT x.value('@cnt', 'int') AS cnt
FROM  @txml.nodes('/row') AS tbl( x )

它将cnt获取当前元素的属性值<row>,并不总是第一个。

演示

于 2013-04-03T16:57:57.703 回答