SQL XML选择where子句

时间:2012-02-22 10:36:47

标签: sql xml tsql xpath xquery

我有这样的事情:

DECLARE @myDoc xml

Set @myDoc =
'<dati_indirizzi>
    <ind_generico>
        <id_indirizzo>1</id_indirizzo>
        <indirizzo>Via Magenta, 41/43</indirizzo>
        <nazione>
            <cod_uic>222</cod_uic>
            <nazione>CLIPPERTON</nazione>
        </nazione>
    </ind_generico>
    <ind_generico>
        <id_indirizzo>2</id_indirizzo>
        <indirizzo>Via Magenta, 41/43</indirizzo>
        <nazione>
            <cod_uic>999</cod_uic>
            <nazione>CLIPPERTON</nazione>
        </nazione>
    </ind_generico>
    <ind_generico>
        <id_indirizzo>3</id_indirizzo>
        <indirizzo>Via Magenta, 41/43</indirizzo>
    </ind_generico>
</dati_indirizzi>'

SELECT Mydoc.cod_uic.value('.', 'varchar(255)') as 'cod_uic'
FROM @myDoc.nodes('/dati_indirizzi/ind_generico/nazione/cod_uic') as Mydoc(cod_uic)

结果是:

cod_uic

222

999

如何才能获得“cod_uic”,其中“id_indirizzo = 2”?结果将是:

cod_uic

999

非常感谢。

2 个答案:

答案 0 :(得分:2)

使用谓词,即:

@myDoc.nodes('/dati_indirizzi/ind_generico[id_indirizzo = 2]/nazione/cod_uic')

如果您有预定义变量,例如:declare @id int = 2,则使用sql:variable()函数:

@myDoc.nodes('/dati_indirizzi/ind_generico[id_indirizzo = sql:variable("@id")]/nazione/cod_uic')

答案 1 :(得分:0)

更新xpath:

@myDoc.nodes('/dati_indirizzi/ind_generico[id_indirizzo=''2'']/nazione/cod_uic')