SQL Server查询xml获取节点

问题描述 投票:0回答:1

此查询返回属性值 "sedicatedId1"

SET @xml = N'<Data>
                <Ref ID="1" sf="storedId1">
                this is the value I want
                </Ref>
            </Data>'

SELECT 
    T.C.value('@sf', 'nvarchar(MAX)') AS result
FROM  
    @xml.nodes('Data/Ref') T(C)
WHERE
    T.C.value('@sf', 'nvarchar(MAX)') = 'storedId1'

我如何才能返回节点值,而不是.即返回 "这是我想要的值"

我想我需要把SELECT改成类似于

SELECT T.C.value('Data/Ref', 'nvarchar(MAX)') AS result

但它失败了

XQuery [value()]:'value()'需要一个单子(或空序列),发现操作数类型为'xdt:untypedAtomic *'。

sql sql-server xml xquery
1个回答
3
投票

试试这个。

SELECT 
    T.C.value('(./text())[1]', 'nvarchar(MAX)') AS result
FROM  
    @xml.nodes('Data/Ref[@sf="storedId1"]') T(C)

2
投票
DECLARE @xml xml   
SET @xml = N'<Data>
                <Ref ID="1" sf="storedId1">
                this is the value I want
                </Ref>
            </Data>'

SELECT 
    T.C.value('.', 'nvarchar(MAX)') AS result
FROM  
    @xml.nodes('Data/Ref') T(C)
WHERE
    T.C.value('@sf', 'nvarchar(MAX)') = 'storedId1'

试试这个: http:/sqlfiddle.com#!18a754028512

© www.soinside.com 2019 - 2024. All rights reserved.