epi82
epi82

Reputation: 497

SQL XML select where clause

I have something like this:

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)

The result is:

cod_uic

222

999

How can I get only the "cod_uic" where "id_indirizzo=2"? The result would be:

cod_uic

999

Thank you very much.

Upvotes: 2

Views: 2988

Answers (2)

Kirill Polishchuk
Kirill Polishchuk

Reputation: 56162

Use predicate, i.e.:

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

If you have predefined variable, e.g.: declare @id int = 2, then use sql:variable() function:

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

Upvotes: 2

kaj
kaj

Reputation: 5251

Update the xpath:

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

Upvotes: 0

Related Questions