Usuário com melhor resposta
Ler o xml por completo.

Pergunta
-
Sei que foi criado a pouco um com tópico relacionado, entretanto estou com uma certa dificuldade em ler o xml por completo. Até consigo ler uma determinada tag, mas se eu quiser ler todas do xml não consigo, me retorna null. Segue o código.
DECLARE @docHandle int
DECLARE @xmlDocument XML
SET @xmlDocument =
'<IdItensValores>
<Item>
<Moeda>
<Id>786F98B5-23EE-4792-B8BA-156F304D08F8</Id>
</Moeda>
<Moeda>
<Id>56BF42B5-23EE-4792-B8BA-156F304D08F8</Id>
</Moeda>
<DtInicioDepre>
<dt>27/04/2012</dt>
</DtInicioDepre>
<Moeda_Aqui>
<cotacao>1.00</cotacao>
</Moeda_Aqui>
<Custo>
<valorCusto>1000.00</valorCusto>
</Custo>
<Deprec>
<valorDeprec>10.00</valorDeprec>
</Deprec>
<Ult_dep>
<dtUlt_Dep>27/04/2012</dtUlt_Dep>
</Ult_dep>
<Tot_dep>
<tot_dep>25</tot_dep>
</Tot_dep>
<Criadopo>
<criadoPor>Diego</criadoPor>
</Criadopo>
</Item>
<Item>
<Moeda>
<Id>786F98B5-23EE-4792-B8BA-156F304D08F8</Id>
</Moeda>
<Moeda>
<Id>56BF42B5-23EE-4792-B8BA-156F304D08F8</Id>
</Moeda>
<DtInicioDepre>
<dt>27/04/2012</dt>
</DtInicioDepre>
<Moeda_Aqui>
<cotacao>1.00</cotacao>
</Moeda_Aqui>
<Custo>
<valorCusto>1000.00</valorCusto>
</Custo>
<Deprec>
<valorDeprec>10.00</valorDeprec>
</Deprec>
<Ult_dep>
<dtUlt_Dep>27/04/2012</dtUlt_Dep>
</Ult_dep>
<Tot_dep>
<tot_dep>25</tot_dep>
</Tot_dep>
<Criadopo>
<criadoPor>Diego</criadoPor>
</Criadopo>
</Item><Item>
<Moeda>
<Id>786F98B5-23EE-4792-B8BA-156F304D08F8</Id>
</Moeda>
<Moeda>
<Id>56BF42B5-23EE-4792-B8BA-156F304D08F8</Id>
</Moeda>
<DtInicioDepre>
<dt>27/04/2012</dt>
</DtInicioDepre>
<Moeda_Aqui>
<cotacao>1.00</cotacao>
</Moeda_Aqui>
<Custo>
<valorCusto>1000.00</valorCusto>
</Custo>
<Deprec>
<valorDeprec>10.00</valorDeprec>
</Deprec>
<Ult_dep>
<dtUlt_Dep>27/04/2012</dtUlt_Dep>
</Ult_dep>
<Tot_dep>
<tot_dep>25</tot_dep>
</Tot_dep>
<Criadopo>
<criadoPor>Diego</criadoPor>
</Criadopo>
</Item>
</IdItensValores>'
-- Dessa forma retorna os ids.
EXEC sp_xml_preparedocument @docHandle OUTPUT, @xmlDocument
SELECT *
FROM OPENXML (@docHandle, '/IdItensValores/Item/Moeda',2)
WITH (IdMoeda_setape uniqueidentifier 'Id')-- Dessa forma tentei retornar todas as informações, mas nada me é retornado.
SELECT *
FROM OPENXML (@docHandle, '/IdItensValores/Item/Moeda/DtInicioDepre/Moeda_Aqui/Custo/Deprec/Ult_dep/Tot_dep/Criadopo',2)
WITH (IdMoeda_setape uniqueidentifier '../../../../../../../@Id',
DtInicioDepre date '../../../../../../@dt',
Moeda_Aqui decimal(18,5) '../../../../../@cotacao',
Custo decimal(18,5) '../../../../@valorCusto',
Deprec decimal(18,5) '../../../@valorDeprec',
Ult_dep date '../../@dtUlt_Dep',
Tot_dep tinyint '../@tot_dep',
Criadopo varchar(50) '@criadoPor')
Alguém pode me dar uma luz ? =/
- Editado Evertoum sexta-feira, 27 de abril de 2012 19:59
Respostas
-
Boa tarde Evertoum,
Não conheço muito das funcionalidades de XML no Sql Server, mas testei seu exemplo e cheguei em um resultado próximo, veja se é realmente isto que você precisa e se o exemplo te ajuda a ter uma idéia.
Só não postei a parte de declaração do seu XML ok..
-- Prepara EXEC sp_xml_preparedocument @docHandle OUTPUT, @xmlDocument; -- Busca resultado SELECT * FROM OPENXML (@docHandle, '/IdItensValores/Item',2) WITH (Id UNIQUEIDENTIFIER './Moeda/Id' , dt DATE './DtInicioDepre/dt' , cotacao decimal(15,2) './Moeda_Aqui/cotacao', valorCusto decimal(15,2) './Custo/valorCusto' , valorDeprec decimal(15,2) './Deprec/valorDeprec', dtUlt_Dep DATE './Ult_dep' , tot_dep INT './Tot_dep' , criadoPor VARCHAR(15) './Criadopo') -- Remove Xml EXEC sp_xml_removedocument @docHandle
Adriano Nascimento
- Editado Adriano Ap Nascimento sexta-feira, 27 de abril de 2012 20:31
- Marcado como Resposta Evertoum sexta-feira, 27 de abril de 2012 20:59
-
DECLARE @docHandle int DECLARE @xmlDocument XML SET @xmlDocument = '<ItensValores> <Item> <Moeda id="a62e8756-cd98-4501-8829-4d3c2c438ed2" /> <DtInicioDepre dt="27/04/2012" /> <Moeda_Aqui cotacao="1.00" /> <Custo valorCusto="1000.00" /> <Deprec valorDeprec="10.00" /> <Ult_dep dtUlt_Dep="27/04/2012" /> <Tot_dep tot_dep="25" /> <Criadopor criadoPor="Diego" /> </Item> </ItensValores>' -- Create an internal representation of the XML document. EXEC sp_xml_preparedocument @docHandle OUTPUT, @xmlDocument SELECT * FROM OPENXML (@docHandle, '/ItensValores/Item', 2) WITH ( IdMoeda_setape uniqueidentifier 'Moeda/@id', DtInicioDepre date 'DtInicioDepre/@dt', Moeda_Aqui decimal (18,5) 'Moeda_Aqui/@cotacao', Custo decimal (18,5) 'Custo/@valorCusto', Deprec decimal (18,5) 'Deprec/@valorDeprec', Ult_dep date 'Ult_dep/@dtUlt_Dep', Tot_dep tinyint 'Tot_dep/@tot_dep', Criadopor varchar(50) 'Criadopor/@criadoPor' )
Todas as Respostas
-
Boa tarde Evertoum,
Não conheço muito das funcionalidades de XML no Sql Server, mas testei seu exemplo e cheguei em um resultado próximo, veja se é realmente isto que você precisa e se o exemplo te ajuda a ter uma idéia.
Só não postei a parte de declaração do seu XML ok..
-- Prepara EXEC sp_xml_preparedocument @docHandle OUTPUT, @xmlDocument; -- Busca resultado SELECT * FROM OPENXML (@docHandle, '/IdItensValores/Item',2) WITH (Id UNIQUEIDENTIFIER './Moeda/Id' , dt DATE './DtInicioDepre/dt' , cotacao decimal(15,2) './Moeda_Aqui/cotacao', valorCusto decimal(15,2) './Custo/valorCusto' , valorDeprec decimal(15,2) './Deprec/valorDeprec', dtUlt_Dep DATE './Ult_dep' , tot_dep INT './Tot_dep' , criadoPor VARCHAR(15) './Criadopo') -- Remove Xml EXEC sp_xml_removedocument @docHandle
Adriano Nascimento
- Editado Adriano Ap Nascimento sexta-feira, 27 de abril de 2012 20:31
- Marcado como Resposta Evertoum sexta-feira, 27 de abril de 2012 20:59
-
DECLARE @docHandle int DECLARE @xmlDocument XML SET @xmlDocument = '<ItensValores> <Item> <Moeda id="a62e8756-cd98-4501-8829-4d3c2c438ed2" /> <DtInicioDepre dt="27/04/2012" /> <Moeda_Aqui cotacao="1.00" /> <Custo valorCusto="1000.00" /> <Deprec valorDeprec="10.00" /> <Ult_dep dtUlt_Dep="27/04/2012" /> <Tot_dep tot_dep="25" /> <Criadopor criadoPor="Diego" /> </Item> </ItensValores>' -- Create an internal representation of the XML document. EXEC sp_xml_preparedocument @docHandle OUTPUT, @xmlDocument SELECT * FROM OPENXML (@docHandle, '/ItensValores/Item', 2) WITH ( IdMoeda_setape uniqueidentifier 'Moeda/@id', DtInicioDepre date 'DtInicioDepre/@dt', Moeda_Aqui decimal (18,5) 'Moeda_Aqui/@cotacao', Custo decimal (18,5) 'Custo/@valorCusto', Deprec decimal (18,5) 'Deprec/@valorDeprec', Ult_dep date 'Ult_dep/@dtUlt_Dep', Tot_dep tinyint 'Tot_dep/@tot_dep', Criadopor varchar(50) 'Criadopor/@criadoPor' )