Usuário com melhor resposta
XML SQL Server 2005

Pergunta
-
Boa Tarde, será que alguem poderia me ajudar?
Estou tentando recuperar as informções de um XML que está em memória porém não estou conseguindo. Abaixo segue o código que utlizei
DECLARE
@doc xml
SELECT @doc = '<ApoliceTW xmlns="http://tempuri.org/ApoliceTW.xsd">
<A5029102_VCR>
<COD_CIA>1</COD_CIA>
<NUM_POLIZA>440000285114</NUM_POLIZA>
<NUM_SPTO>0</NUM_SPTO>
<NUM_APLI>0</NUM_APLI>
<NUM_SPTO_APLI>0</NUM_SPTO_APLI>
<NUM_CUOTA>1</NUM_CUOTA>
<MCA_CA>N</MCA_CA>
<MCA_CV>N</MCA_CV>
<COD_AGT>71503</COD_AGT>
<MCA_ACTIVO>S</MCA_ACTIVO>
<FEC_VCTO2_VCR>2008-09-29T00:00:00-03:00</FEC_VCTO2_VCR>
<IMP_TOTAL2_VCR>2333.17</IMP_TOTAL2_VCR>
<FEC_VCTO3_VCR>2008-10-09T00:00:00-03:00</FEC_VCTO3_VCR>
<IMP_TOTAL3_VCR>2461.61</IMP_TOTAL3_VCR>
<COD_COBRO_VCR>BA</COD_COBRO_VCR>
<COD_ENTIDAD>0399</COD_ENTIDAD>
<COD_OFICINA>0454</COD_OFICINA>
<COD_AUX>0</COD_AUX>
<FEC_EFEC_RECIBO>2008-09-19T00:00:00-03:00</FEC_EFEC_RECIBO>
<NUM_CUOTAS>1</NUM_CUOTAS>
<PCT_IMPUESTO_VCR>7.380</PCT_IMPUESTO_VCR>
<MCA_PROCESO_VCR>N</MCA_PROCESO_VCR>
<COD_USR>TRON2000</COD_USR>
<FEC_ACTU>2008-08-21T00:00:00-03:00</FEC_ACTU>
<MCA_ATRASO_VCR>N</MCA_ATRASO_VCR>
</A5029102_VCR>
</ApoliceTW>'DECLARE
@docHandle int
EXEC sp_xml_preparedocument @docHandle OUTPUT, @doc, '<ROOT xmlns:rootNS="http://tempuri.org/ApoliceTW.xsd"/>'
SELECT * FROM
OPENXML(@docHandle, 'ApoliceTW/A5029102_VCR') --'/rootNS:ApoliceTW/A5029102_VCR')
WITH
( A5029102_VCR Varchar(100),
COD_CIA Varchar(100),
NUM_POLIZA Varchar(100),
NUM_SPTO Varchar(100),
NUM_APLI Varchar(100),
NUM_SPTO_APLI Varchar(100),
NUM_CUOTA Varchar(100),
MCA_CA Varchar(100),
MCA_CV Varchar(100),
COD_AGT Varchar(100),
MCA_ACTIVO Varchar(100),
FEC_VCTO2_VCR Varchar(100),
IMP_TOTAL2_VCR Varchar(100),
FEC_VCTO3_VCR Varchar(100),
IMP_TOTAL3_VCR Varchar(100),
COD_COBRO_VCR Varchar(100),
COD_ENTIDAD Varchar(100),
COD_OFICINA Varchar(100),
COD_AUX Varchar(100),
FEC_EFEC_RECIBO Varchar(100),
NUM_CUOTAS Varchar(100),
PCT_IMPUESTO_VCR Varchar(100),
MCA_PROCESO_VCR Varchar(100),
COD_USR Varchar(100),
FEC_ACTU Varchar(100),
MCA_ATRASO_VCR Varchar(100)
)
Desde já muito obrigado!
Respostas
-
Boa Noite,
Algumas vezes o NameSpace pode facilitar a elaboração do XML, mas algumas vezes...
Tente algo como a alternativa abaixo:
--SET @doc = '<ApoliceTW xmlns="http://tempuri.org/ApoliceTW.xsd"> DECLARE @doc xml SET @doc = '<ApoliceTW xmlns="http://tempuri.org/ApoliceTW.xsd"> <A5029102_VCR> <COD_CIA>1</COD_CIA> <NUM_POLIZA>440000285114</NUM_POLIZA> <NUM_SPTO>0</NUM_SPTO> <NUM_APLI>0</NUM_APLI> <NUM_SPTO_APLI>0</NUM_SPTO_APLI> <NUM_CUOTA>1</NUM_CUOTA> <MCA_CA>N</MCA_CA> <MCA_CV>N</MCA_CV> <COD_AGT>71503</COD_AGT> <MCA_ACTIVO>S</MCA_ACTIVO> <FEC_VCTO2_VCR>2008-09-29T00:00:00-03:00</FEC_VCTO2_VCR> <IMP_TOTAL2_VCR>2333.17</IMP_TOTAL2_VCR> <FEC_VCTO3_VCR>2008-10-09T00:00:00-03:00</FEC_VCTO3_VCR> <IMP_TOTAL3_VCR>2461.61</IMP_TOTAL3_VCR> <COD_COBRO_VCR>BA</COD_COBRO_VCR> <COD_ENTIDAD>0399</COD_ENTIDAD> <COD_OFICINA>0454</COD_OFICINA> <COD_AUX>0</COD_AUX> <FEC_EFEC_RECIBO>2008-09-19T00:00:00-03:00</FEC_EFEC_RECIBO> <NUM_CUOTAS>1</NUM_CUOTAS> <PCT_IMPUESTO_VCR>7.380</PCT_IMPUESTO_VCR> <MCA_PROCESO_VCR>N</MCA_PROCESO_VCR> <COD_USR>TRON2000</COD_USR> <FEC_ACTU>2008-08-21T00:00:00-03:00</FEC_ACTU> <MCA_ATRASO_VCR>N</MCA_ATRASO_VCR> </A5029102_VCR> </ApoliceTW>' SELECT Apolice.A.value(' declare namespace x="http://tempuri.org/ApoliceTW.xsd"; (./x:COD_CIA)[1]','smallint') As COD_CIA, Apolice.A.value(' declare namespace x="http://tempuri.org/ApoliceTW.xsd"; (./x:NUM_POLIZA)[1]','char(12)') As NUM_POLIZA, Apolice.A.value(' declare namespace x="http://tempuri.org/ApoliceTW.xsd"; (./x:NUM_SPTO)[1]','smallint') As NUM_SPTO FROM @doc.nodes(' declare namespace x="http://tempuri.org/ApoliceTW.xsd"; /x:ApoliceTW/x:A5029102_VCR') Apolice(A)
Sou suspeito para falar, mas os artigos do Plugmasters podem realmente ajudá-lo muito.
[ ]s,
Gustavo Maia Aguiar
http://gustavomaiaaguiar.spaces.live.com
Usando o SSIS para importar várias planilhas de um mesmo arquivo Excel para o SQL Server
http://gustavomaiaaguiar.spaces.live.com/blog/cns!F4F5C630410B9865!591.entry
Classifique as respostas. O seu feedback é imprescindível- Marcado como Resposta Everton Lima sexta-feira, 17 de julho de 2009 00:28
-
Marcelo a melhor solução realmente foi a de retirar o XMLNS, obrigado pela ajuda!
[]s,
Everton.- Marcado como Resposta Everton Lima sexta-feira, 17 de julho de 2009 00:27
Todas as Respostas
-
-
-
Everton,
Quem monta este XML?
remove o XMLNS
Abaixo uso o XQUERY, de uma pesquisada no BOL
DECLARE @x xml SET @x = '<ApoliceTW> <A5029102_VCR> <COD_CIA>1</COD_CIA> <NUM_POLIZA>440000285114</NUM_POLIZA> <NUM_SPTO>0</NUM_SPTO> <NUM_APLI>0</NUM_APLI> <NUM_SPTO_APLI>0</NUM_SPTO_APLI> <NUM_CUOTA>1</NUM_CUOTA> <MCA_CA>N</MCA_CA> <MCA_CV>N</MCA_CV> <COD_AGT>71503</COD_AGT> <MCA_ACTIVO>S</MCA_ACTIVO> <FEC_VCTO2_VCR>2008-09-29T00:00:00-03:00</FEC_VCTO2_VCR> <IMP_TOTAL2_VCR>2333.17</IMP_TOTAL2_VCR> <FEC_VCTO3_VCR>2008-10-09T00:00:00-03:00</FEC_VCTO3_VCR> <IMP_TOTAL3_VCR>2461.61</IMP_TOTAL3_VCR> <COD_COBRO_VCR>BA</COD_COBRO_VCR> <COD_ENTIDAD>0399</COD_ENTIDAD> <COD_OFICINA>0454</COD_OFICINA> <COD_AUX>0</COD_AUX> <FEC_EFEC_RECIBO>2008-09-19T00:00:00-03:00</FEC_EFEC_RECIBO> <NUM_CUOTAS>1</NUM_CUOTAS> <PCT_IMPUESTO_VCR>7.380</PCT_IMPUESTO_VCR> <MCA_PROCESO_VCR>N</MCA_PROCESO_VCR> <COD_USR>TRON2000</COD_USR> <FEC_ACTU>2008-08-21T00:00:00-03:00</FEC_ACTU> <MCA_ATRASO_VCR>N</MCA_ATRASO_VCR> </A5029102_VCR> </ApoliceTW>' SELECT @x.query('/ApoliceTW/A5029102_VCR/*')
Att.
Marcelo Fernandes
MCP, MCDBA, MCSA, MCTS. Se útil, classifique!!! -
Amigo
Tambem enfretei o mesmo problema
solução que encontrei
Remover o namespace do arquivo xml
utilizar xquery para obter os dados
segue abaixo link com ducumentação do xquery bem como alguns macetes para trabalhar com arquivo xml no sql server 2005
espero ter ajudado
http://www.plugmasters.com.br/sys/materias/773/8/SQL-Server-2005-New-Features:-Os-m%E9todos-XML---Parte-1
http://www.plugmasters.com.br/sys/materias/799/1/SQL-Server-2005-New-Features%3A-Os-m%E9todos-XML---Parte-2 -
-
-
Boa Noite,
Algumas vezes o NameSpace pode facilitar a elaboração do XML, mas algumas vezes...
Tente algo como a alternativa abaixo:
--SET @doc = '<ApoliceTW xmlns="http://tempuri.org/ApoliceTW.xsd"> DECLARE @doc xml SET @doc = '<ApoliceTW xmlns="http://tempuri.org/ApoliceTW.xsd"> <A5029102_VCR> <COD_CIA>1</COD_CIA> <NUM_POLIZA>440000285114</NUM_POLIZA> <NUM_SPTO>0</NUM_SPTO> <NUM_APLI>0</NUM_APLI> <NUM_SPTO_APLI>0</NUM_SPTO_APLI> <NUM_CUOTA>1</NUM_CUOTA> <MCA_CA>N</MCA_CA> <MCA_CV>N</MCA_CV> <COD_AGT>71503</COD_AGT> <MCA_ACTIVO>S</MCA_ACTIVO> <FEC_VCTO2_VCR>2008-09-29T00:00:00-03:00</FEC_VCTO2_VCR> <IMP_TOTAL2_VCR>2333.17</IMP_TOTAL2_VCR> <FEC_VCTO3_VCR>2008-10-09T00:00:00-03:00</FEC_VCTO3_VCR> <IMP_TOTAL3_VCR>2461.61</IMP_TOTAL3_VCR> <COD_COBRO_VCR>BA</COD_COBRO_VCR> <COD_ENTIDAD>0399</COD_ENTIDAD> <COD_OFICINA>0454</COD_OFICINA> <COD_AUX>0</COD_AUX> <FEC_EFEC_RECIBO>2008-09-19T00:00:00-03:00</FEC_EFEC_RECIBO> <NUM_CUOTAS>1</NUM_CUOTAS> <PCT_IMPUESTO_VCR>7.380</PCT_IMPUESTO_VCR> <MCA_PROCESO_VCR>N</MCA_PROCESO_VCR> <COD_USR>TRON2000</COD_USR> <FEC_ACTU>2008-08-21T00:00:00-03:00</FEC_ACTU> <MCA_ATRASO_VCR>N</MCA_ATRASO_VCR> </A5029102_VCR> </ApoliceTW>' SELECT Apolice.A.value(' declare namespace x="http://tempuri.org/ApoliceTW.xsd"; (./x:COD_CIA)[1]','smallint') As COD_CIA, Apolice.A.value(' declare namespace x="http://tempuri.org/ApoliceTW.xsd"; (./x:NUM_POLIZA)[1]','char(12)') As NUM_POLIZA, Apolice.A.value(' declare namespace x="http://tempuri.org/ApoliceTW.xsd"; (./x:NUM_SPTO)[1]','smallint') As NUM_SPTO FROM @doc.nodes(' declare namespace x="http://tempuri.org/ApoliceTW.xsd"; /x:ApoliceTW/x:A5029102_VCR') Apolice(A)
Sou suspeito para falar, mas os artigos do Plugmasters podem realmente ajudá-lo muito.
[ ]s,
Gustavo Maia Aguiar
http://gustavomaiaaguiar.spaces.live.com
Usando o SSIS para importar várias planilhas de um mesmo arquivo Excel para o SQL Server
http://gustavomaiaaguiar.spaces.live.com/blog/cns!F4F5C630410B9865!591.entry
Classifique as respostas. O seu feedback é imprescindível- Marcado como Resposta Everton Lima sexta-feira, 17 de julho de 2009 00:28
-
Marcelo a melhor solução realmente foi a de retirar o XMLNS, obrigado pela ajuda!
[]s,
Everton.- Marcado como Resposta Everton Lima sexta-feira, 17 de julho de 2009 00:27
-
-
-