Usuário com melhor resposta
QUERY PARA XML

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
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 SnippetEXEC 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 :-)
Todas as Respostas
-
Edgar,
Veja este exemplo:
Code SnippetDECLARE @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)) -
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 SnippetEXEC 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 :-)
-
-
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
-
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