Recebi um arquivo do Excel (versão 2010) e, com base no requisito, fui solicitado a salvá-lo como um arquivo XML e, em seguida, importar para os dados SQL prontos para serem consultados em instruções SELECT normais.
Abaixo está a lista de etapas que segui, mas agora que tenho um SELECT nos dados, nenhum registro é retornado. Não tenho certeza se é devido à conversão que fiz para obter um arquivo XML de um arquivo do Excel ou se há um problema na minha OPENXML
consulta.
- Para obter um
XML
arquivo do.xlsx
arquivo, abri o arquivo no EXCEL 2010 e salvei em 'Planilha XML 2003 (*.XML)'. Importei o arquivo XML em uma tabela utilizando o código abaixo:
INSERT INTO XMLwithOpenXML(XMLData, LoadedDateTime) SELECT CONVERT(XML, BulkColumn) AS BulkColumn, GETDATE() FROM OPENROWSET(BULK 'C:\DEV\TestXML.xml', SINGLE_BLOB) AS x; SELECT * FROM XMLwithOpenXML
1. Os dados XML foram armazenados agora na tabela, então eu uso o código abaixo para lê-los em uma instrução SELECT para acessar as colunas individuais:
DECLARE @XML AS XML, @hDoc AS INT, @SQL NVARCHAR (MAX)
SELECT @XML = XMLData FROM XMLwithOpenXML
EXEC sp_xml_preparedocument @hDoc OUTPUT, @XML
SELECT SNo,Salutation,PatientNRIC,FirstName,LastName,Gender,Race
FROM OPENXML(@hDoc, 'ROOT/SNo/Salutation/PatientNRIC/FirstName/LastName/Gender/Race')
WITH
(
SNo [nvarchar](50) '@SNo',
Salutation [nvarchar](100) '@Salutation',
PatientNRIC [nvarchar](255) '@PatientNRIC',
FirstName [nvarchar](255) '@FirstName',
LastName [nvarchar](255) '@LastName',
Gender [nvarchar](255) '@Gender',
Race [nvarchar](255) '@Race'
)
Então
EXEC sp_xml_removedocument @hDoc
GO
No entanto, o que recebo é apenas o nome das colunas, os dados reais não foram retornados:
Sou totalmente novo no comentário OPENXML e no trabalho com arquivos XML, tentei ler postagens diferentes, mas ainda não consegui descobrir por que nenhum dado é mostrado em minha consulta selecionada. Qualquer ajuda é apreciada.
Como seu XML é mantido em uma tabela, você pode usar os métodos do tipo de dados XML (por exemplo, .nodes, .value, .query etc). O que você pode ter um pouco de dificuldade são os namespaces em XML. Comece aqui para saber mais sobre eles: Entendendo Namespaces XML .
Aqui estão alguns exemplos de consultas que fiz em uma planilha semelhante à sua. Experimente-os e trabalhe na Escada conforme sugerido por @MikaelEriksson e veja se eles começam a fazer sentido.
Meus resultados:
Apenas uma observação sobre
OPENXML
, pode ser bom para partes maiores de XML, mas eu tento evitá-lo, se possível, devido a problemas de memória bem conhecidos. Seu exemplo particular não está funcionando por causa dos namespaces e você especificou o caminho errado (Root etc). Poste de volta se você realmente deseja trabalhar com oOPENXML
, mas eu desaconselharia isso neste exemplo, pois seus dados são mantidos em uma tabela -OPENXML
só pode funcionar com um pedaço de XML por vez.