XML com variável no SQL Server
-
sexta-feira, 17 de agosto de 2012 20:17
Preciso criar um loop para ler um XML, usar uma variavel dentro de uma função value, como segue abaixo:
declare @j int
SELECT Tab.Col.value('movimentos[1]/trechos[1]/segmento[@i]/de[1]','varchar(50)') AS de FROM @venda.nodes('venda') Tab(Col)
Alguem pode me ajudar por gentileza ?
Obrigado
Flavio
- Movido Gustavo Maia AguiarMVP, Moderator segunda-feira, 20 de agosto de 2012 12:34 (De:SQL Server - Infra Geral)
Todas as Respostas
-
sexta-feira, 17 de agosto de 2012 22:36Moderador
Boa Noite,
Fácil, fácil. Segue um exemplo:
declare @xml xml
set @xml = '<?xml version="1.0"?>
<Pessoas>
<Pessoa Cod="1" Nome="Araldino"/>
<Pessoa Cod="2" Nome="Roberta"/>
<Pessoa Cod="3" Nome="Sandro"/>
<Pessoa Cod="4" Nome="Tays"/>
</Pessoas>'declare @codigo int
set @codigo = 1select @xml.value('(/Pessoas/Pessoa[@Cod=sql:variable("@codigo")]/@Nome)[1]','varchar(80)')
No seu caso, basta adaptar sua XPath. Ex:
SELECT Tab.Col.value('movimentos[1]/trechos[1]/segmento[sql:variable("@i")]/de[1]','varchar(50)') AS de FROM @venda.nodes('venda') Tab(Col)
Maiores detalhes sobre XML, sugiro o link abaixo:
Compêndio de XML – Preparação para o exame 70-433 – MCTS Microsoft SQL Server 2008 – Database Development
http://gustavomaiaaguiar.wordpress.com/2010/12/17/compendio-de-xml-%E2%80%93-preparacao-para-o-exame-70-433-mcts-microsoft-sql-server-2008-database-development/[ ]s,
Gustavo Maia Aguiar
Blog: http://gustavomaiaaguiar.wordpress.com
Vídeos:http://www.youtube.com/user/gmasqlClassifique as respostas. O seu feedback é imprescindível
- Sugerido como Resposta Gustavo Maia AguiarMVP, Moderator sexta-feira, 17 de agosto de 2012 22:37
-
segunda-feira, 20 de agosto de 2012 11:41
Caro Gustavo,
No meu caso a minha estrutura nao tem esse @cod dentro da tag, a minha estrutura é essa abaixo, e por isso não funciona, eu preciso fazer um loop nessa tag segmento. Segue a estrutura abaixo:
<movimento>
<trecho>
<segmento>
<de>a</de>
<para>b/para>
</segmento>
<segmento>
<de>c</de>
<para>d</para>
</segmento>
<segmento>
<de>e</de>
<para>f</para>
</segmento>
<segmento>
<de>g</de>
<para>h</para>
</segmento>
<segmento>
<de>i</de>
<para>j</para>
</segmento>
</trecho>
</movimento> -
segunda-feira, 20 de agosto de 2012 12:33Moderador
Bom Dia,
Você poderia mostrar a saída que espera a partir dessa estrutura ?
[ ]s,
Gustavo Maia Aguiar
Blog: http://gustavomaiaaguiar.wordpress.com
Vídeos:http://www.youtube.com/user/gmasqlClassifique as respostas. O seu feedback é imprescindível
-
segunda-feira, 20 de agosto de 2012 14:26Consegui Gustavo .... Obrigado Gustavo....
-
segunda-feira, 20 de agosto de 2012 15:28Moderador
Boa Tarde,
Não entendi o objetivo da sua XQuery. Tentei resolver com o método nodes que me pareceu mais prático
select
t.c.value('de[1]','varchar(20)'),
t.c.value('para[1]','varchar(20)'),
t.c.value('datachegada[1]','varchar(20)'),
t.c.value('datasaida[1]','varchar(20)')
from @venda.nodes('/venda/movimentos/trechos/segmento') t(c)Entretanto, vi que sua XQuery retornou alguns registros que não entendi:
de para datasaida
NVT dajldja 17/8/2012
NVT dajldja 20/8/2012Como pode, se no XML, não há registro de NVT, dajldja para o dia 17/08/2012 ?
[ ]s,
Gustavo Maia Aguiar
Blog: http://gustavomaiaaguiar.wordpress.com
Vídeos:http://www.youtube.com/user/gmasqlClassifique as respostas. O seu feedback é imprescindível
- Sugerido como Resposta Gustavo Maia AguiarMVP, Moderator segunda-feira, 20 de agosto de 2012 15:28
-
quarta-feira, 22 de agosto de 2012 02:59
Ja resolvi Obrigado Gustavo.....
-
quarta-feira, 22 de agosto de 2012 03:08Moderador
Olá Flávio,
Que bom que pude ajudá-lo. Você poderia marcar a questão como respondida ?
[ ]s,
Gustavo Maia Aguiar
Blog: http://gustavomaiaaguiar.wordpress.com
Vídeos:http://www.youtube.com/user/gmasqlClassifique as respostas. O seu feedback é imprescindível
- Marcado como Resposta Flavio Climaco quarta-feira, 22 de agosto de 2012 03:33

