none
QUERY PARA XML RRS feed

  • Pergunta

  •  

    Alguem poderia me informar o procedimento correto para fazer uma query com saída para xml....vamos lá...a situação seria + 0 -  nesses moldes:

     

    SQL 2000

     

    Estrutura da tabela + -  assim:

     

    Nome (50)

    Endereço (50)

    Telefone (8)

     

    quero fazer uma tipo com select, onde me traga o nome e o endereço por exemplo e automaticamente eu jogue o resultado desse select em um arquivo xml.

    Qual seria a melhor maneira de fazer isso?

     

    Grato,

     

    Rombesso

    quarta-feira, 9 de abril de 2008 03:03

Respostas

  • Bom dia, eu creio que a melhor solução seria utilizar FOR XML AUTO + xp_cmdShell + BCP para gerar um arquivo com o XML.

     

    Por ex:

     

    Code Snippet
    EXEC master.dbo.xp_cmdshell 'bcp "SELECT * FROM master.dbo.sysobjects FOR XML AUTO" queryout C:\xml.xml -S "NOMEDAINSTANCIASQLSERVER" -T -c'

     

     

    O comando acima irá gerar um arquivo xml no c:\ com os dados da tabela sysobjects. Repare na clausula FOR XML AUTO no final do select.

     

    Talvez seja necessário habilitar a xp_cmdShell já que ela vem desabilitada por padrão, para isso basta executar o comando abaixo.

     

    Code Snippet

    -- To allow advanced options to be changed.

    EXEC sp_configure 'show advanced options', 1

    GO

    -- To update the currently configured value for advanced options.

    RECONFIGURE

    GO

    -- To enable the feature.

    EXEC sp_configure 'xp_cmdshell', 1

    GO

    -- To update the currently configured value for this feature.

    RECONFIGURE

    GO

     

     

    Para maiores informações procure por BCP mais XML no Live Search :-)

    quarta-feira, 9 de abril de 2008 12:38

Todas as Respostas

  • Edgar,

     

    Veja este exemplo:

     

    Code Snippet

    DECLARE @DocHandle int

     

    DECLARE @XmlDocument nvarchar(4000)


    SET @XmlDocument = N'<ROOT>
    <produtos CODIGO="211" DESCRICAO="LUVA DOMÉSTICA TOP" MARCA="SANRO TOP" ></produtos>
    <produtos CODIGO="213" DESCRICAO="LUVA DOMÉSTICA  STANDARD" MARCA="SANRO STANDARD" ></produtos>
    <produtos CODIGO="217" DESCRICAO="L.DOM.PÃO DE AÇÚCAR" MARCA="SANRO TOP" ></produtos>
    <produtos CODIGO="218" DESCRICAO="L.DOMESTICA SOFT" MARCA="SANRO SOFT" ></produtos>
    </ROOT>'

     

    EXEC sp_xml_preparedocument @DocHandle OUTPUT, @XmlDocument

     

    -- Execute a SELECT statement using OPENXML rowset provider.

    SELECT *
    FROM OPENXML (@DocHandle, '/ROOT/produtos',1)
          With (CODIGO VarChar(3),
                   DESCRICAO VarChar(50),
                   MARCA VARCHAR(20))

     

     


    quarta-feira, 9 de abril de 2008 11:18
  • Bom dia, eu creio que a melhor solução seria utilizar FOR XML AUTO + xp_cmdShell + BCP para gerar um arquivo com o XML.

     

    Por ex:

     

    Code Snippet
    EXEC master.dbo.xp_cmdshell 'bcp "SELECT * FROM master.dbo.sysobjects FOR XML AUTO" queryout C:\xml.xml -S "NOMEDAINSTANCIASQLSERVER" -T -c'

     

     

    O comando acima irá gerar um arquivo xml no c:\ com os dados da tabela sysobjects. Repare na clausula FOR XML AUTO no final do select.

     

    Talvez seja necessário habilitar a xp_cmdShell já que ela vem desabilitada por padrão, para isso basta executar o comando abaixo.

     

    Code Snippet

    -- To allow advanced options to be changed.

    EXEC sp_configure 'show advanced options', 1

    GO

    -- To update the currently configured value for advanced options.

    RECONFIGURE

    GO

    -- To enable the feature.

    EXEC sp_configure 'xp_cmdshell', 1

    GO

    -- To update the currently configured value for this feature.

    RECONFIGURE

    GO

     

     

    Para maiores informações procure por BCP mais XML no Live Search :-)

    quarta-feira, 9 de abril de 2008 12:38
  • Fabiano,

     

    Concordo plenamente, somente quis demonstrar como ele poderá pegar o conteúdo de um xml e gerar uma table.

     

    Mas a sua solução é ótima, eu não me atentei para este declara em gerar um xml.

     

    quarta-feira, 9 de abril de 2008 12:41
  • Boa tarde,

     

    Desculpem a demora...estive ausente.....

    Junior, achei seu exemplo um pouco complicado demais para a minha situação...o do Fabiano está mais condizente com o que necessito.....mas sem ser redudante...qual seria exatamente o comando para jogar um resultado de um select em uma planilha do excel....onde eu posso determinar o lugar, como por exemplo a unidade C. um comando do tipo

     

    SELECT * FROM teste

     

     

    e o resultado desse select eu jogar em um arquivo do excel...um xls.....no path  c:\teste.xls

     

    é possível?

     

    grato

     

     

    segunda-feira, 14 de abril de 2008 18:24
  • Boa Tarde,

     

    Acredito que isso seria uma nova dúvida já que não está mais relacionada ao post original.

     

    Não é possível (ou pelo menos de uma forma tão simplista quanto um SELECT) jogar o resultado de um SELECT em um arquivo XLS já especificando a saída. É possível gravar em um arquivo XLS já existente mas criar um a partir de um comando SELECT não é possível.

     

    O meio mais adequado para fazer isso seria através do SSIS ou do DTS mas aí não seria uma simples instrução SELECT. Se exportar para um TXT for suficiente procure o utilitário BCP

     

    [ ]s,

     

    Gustavo

    segunda-feira, 14 de abril de 2008 19:23