Introdução
Muitas vezes, temos de realizar integração de dados no SQL Server, com diferentes fontes de dados como arquivos .txt (texto tabulado ou com separador), .xls ou .csv (Excel).Nem sempre há tempo hábil para criar um pacote SSIS que faça toda importação destes dados, então uma alternativa muito útil é utilizar o método OPENROWSET.
Neste artigo, vamos abordar a importação de dados de arquivos Excel (.xls e .xlsx).
Construindo o ambiente para Teste
Para que possamos reproduzir todo o processo de importação de dados de um arquivo Excel para uma tabela de um banco de dados no SQL Server precisamos:- Criar um arquivo Excel como modelo para esta importação;
- Configurar o servidor Windows, instalando os componentes necessários;
- Configurar às permissões necessárias na instância SQL para que seja possível obter estes dados.
Vamos preparar o ambiente !
Criando um Arquivo para Teste (em formato Excel)
Para esta tarefa, vamos criar um arquivo Excel simples apenas com alguns registros que possam servir de carga para a demonstração.
Instalando os componentes necessários no Windows Server
Para obter os dados em uma consulta dentro do SQL Server, utilizamos um Provedor de Dados OLE DB.
A maior parte dos arquivos atualmente poderão utilizar o Provedor de Dados "Microsoft.ACE.OLEDB.12.0" que pode ser obtido gratuitamente através do Data Connectivity Components.
Este pacote irá disponibilizar todos os drivers ODBC e OLEDB para manipulação de dados, conforme a tabela abaixo:
File Type (extension) | Extended Properties |
Excel 97-2003 Workbook (.xls) | Excel 8.0 |
Excel 2007-2010 Workbook (.xlsx) | Excel 12.0 XML |
Excel 2007-2010 Macro-enabled workbook (.xlsm) | Excel 12.0 Macro |
Excel 2007-2010 Non-XML binary workbook (.xlsb) | Excel 12.0 |
Habilitando à Instância SQL para leitura do arquivo
A execução de consultas distribuídas, como quando utilizamos OPENROWSET só é possível quando a instância do servidor SQL tem a configuração Ad Hoc Distributed Queries habilitada. Por padrão, toda instância SQL Server mantém esta permissão negada.
![]() |
---|
As Configurações Avançadas só devem ser alteradas por um Administrador de Banco de Dados experiente ou um técnico certificado em SQL Server.
|
Para habilitar este recurso basta utilizar a stored procedure de sistema sp_configure em sua instância SQL para exibir suas Configurações Avançadas através do parâmetro show advanced options e logo à seguir, habilitar a configuração Ad Hoc Distributed Queries permitindo o uso de consultas distribuídas.
USE [master]
GO
--CONFIGURANDO À INSTÂNCIA SQL PARA ACEITAR OPÇÕES AVANÇADAS
EXECsp_configure'show advanced options', 1
RECONFIGURE
GO
--HABILITANDO O USO DE CONSULTAS DISTRIBUÍDAS
EXECsp_configure'Ad Hoc Distributed Queries', 1
RECONFIGURE
GO
A mudança nas Configurações Avançadas só entram em vigor após a execução do comando RECONFIGURE.
Assim que temos às permissões concedidas, temos de vincular o Provedor de Dados "Microsoft.ACE.OLEDB.12.0" no SQL Server através do parâmetro AllowInProcess para que possamos utilizar os recursos deste Provedor de Dados e também precisamos permitir o uso de parâmetros dinâmicos através de DynamicParameters para que nossas consultas possam utilizar cláusulas T-SQL.
USE [master]
GO
--ADICIONANDO OS DRIVERS NA INSTÂNCIA SQL
EXECmaster.dbo.sp_MSset_oledb_propN'Microsoft.ACE.OLEDB.12.0',N'AllowInProcess', 1
GO
EXECmaster.dbo.sp_MSset_oledb_propN'Microsoft.ACE.OLEDB.12.0',N'DynamicParameters', 1
GO
See this output SQL script in the image below.

Consultando e Importando à Planilha
In --CONSULTANDO UMA PLANILHA
SELECT*FROM
OPENROWSET('Microsoft.ACE.OLEDB.12.0',
'Excel 12.0;HDR=Yes;Database=C:\Microsoft\Teste.xls',
'SELECT * FROM [Plan1$]' );
See this output SQL script in the image below.
É importante também verificar se o usuário do servidor SQL possui acesso ao diretório do Windows onde está sua planilha.
Conclusão
Possuir um recurso alternativo e rápido para importação de dados, através de T-SQL é extremamente útil, principalmente quando temos de manipular arquivos em formatos proprietários, como no caso dos arquivos .xlsx onde é necessário utilizar o Provedor de Dados adequado para que obter os dados corretamente e com facilidade de uso.É importante estar atento para que apenas os usuários que realmente possuem necessidade de manipular estes arquivos possam utilizar estes recursos, reduzindo ao máximo a vulnerabilidade de seu ambiente através de uma permissão no seu servidor SQL Server.
Referências
- OPENROWSET (Transact-SQL)
- Importar dados em massa usando BULK INSERT ou OPENROWSET(BULK...) (SQL Server)
- Provedores OLE DB testados com o SQL Server
Veja Também
- Wiki: Portal of TechNet Wiki Portals
- SQL Server: How to Find the First Available Timeslot for Scheduling
- Transact-SQL Portal