SQL XML выберите предложение - PullRequest
       6

SQL XML выберите предложение

2 голосов
/ 22 февраля 2012

У меня есть что-то вроде этого:

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 ]

2 голосов
/ 22 февраля 2012

Используйте предикат, то есть:

@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')
0 голосов
/ 22 февраля 2012

Обновление xpath:

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