Arquivo

Archive for agosto \01\America/Sao_Paulo 2018

T-SQL: Importar dados do Excel e Access usando MDAC – ACE

1 de agosto de 2018 Deixe um comentário

O Microsoft SQL Server possue ferramentas para fazer o trabalho de importação e exportação de dados do Excel, Access entre outras fontes.

Porém, no meu caso desejo executar um script importação e/ou exportação.

Como fazer isso usando T-SQL?

Para isso é necessário ter instalado o Provider no servidor do SQL Server.

  • Microsoft.Jet.OLEDB.4.0 – depreciado
  • Microsoft.ACE.OLEDB.12.0
  • Microsoft.ACE.OLEDB.16.0

O Jet OLEDB foi depreciado, mas existem diversos códigos antigos de exemplos com ele. Podemos aproveitar esses códigos, substituindo pelo Microsft ACE OLEDB.

Office 2010 – ACE 12 – Microsoft Access Database Engine 2010 Redistributable

Office 2016 – ACE 16 – Microsoft Access Database Engine 2016 Redistributable

Para conferir a instalação entre no SQL Managment Studio – Server Objects – Linked Servers – Providers

SQLLinkedServerProvider001

-- Ativa Linked Server

sp_configure 'show advanced options', 1

GO

RECONFIGURE WITH OverRide

GO

sp_configure 'Ad Hoc Distributed Queries', 1

GO

RECONFIGURE WITH OverRide

GO

-- Ativa Permissão ao Provider versão ACE 12

EXEC sp_MSSet_oledb_prop N'Microsoft.ACE.OLEDB.12.0', N'AllowInProcess',1

GO

EXEC sp_MSSet_oledb_prop N'Microsoft.ACE.OLEDB.12.0', N'DynamicParameters',1

GO

Caso recebe algumas mensagem referente a permissão de acesso, ou erro de impossibilidade de criar linked server, leia Permissions needed to set up linked server with out-of-process provider

 

-- Ativa Permissão ao Provider versão ACE 16

EXEC sp_MSSet_oledb_prop N'Microsoft.ACE.OLEDB.16.0', N'AllowInProcess',1

GO

EXEC sp_MSSet_oledb_prop N'Microsoft.ACE.OLEDB.16.0', N'DynamicParameters',1

GO

-- Usa o Provider Jet ( Depeciado ) para acessar XLS

SELECT * FROM OPENDATASOURCE('Microsoft.Jet.OLEDB.4.0','Data Source=C:\Excel\File.xls; Extended Properties=Excel 5.0')...[Sheet1$]

GO

-- Usa o Provider ACE 12 para acessar XLS / XLSX

SELECT * FROM OPENDATASOURCE('Microsoft.ACE.OLEDB.12.0','Data Source=C:\ExcelFiles\File2003.xls; Extended Properties=Excel 8.0')...[Sheet1$]

GO

-- Usa o Provider ACE 16 para acessar XLS / XLSX

SELECT * FROM OPENDATASOURCE('Microsoft.ACE.OLEDB.16.0','Data Source=C:\ExcelFiles\File2016.xlsx; Extended Properties=Excel 12.0')...[Sheet1$]

GO

Resultado

SQLfromExcelAccess

Importante!!!

O arquivo está na unidade “C:” local do SERVIDOR SQL Server.

Para abrir arquivo da rede, use o caminho COMPLETO, conforme abaixo:

SELECT * FROM OPENDATASOURCE('Microsoft.ACE.OLEDB.12.0','Data Source=\\NomeDoPC\NomePastaCompartilhada\NomeArquivo.xlsx; Extended Properties=Excel 8.0')...[NomePlanilha$]
SELECT * FROM OPENDATASOURCE('Microsoft.ACE.OLEDB.16.0','Data Source=\\NomeDoPC\NomePastaCompartilhada\NomeArquivo.xlsx; Extended Properties=Excel 12.0')...[NomePlanilha$]

fonte:

Query Excel file source through Linked Server

How to use Excel with SQL Server linked servers and distributed queries

Configuiring a Linked Microsoft Access Server on SQL 2005

Microsoft.Jet.OLEDB4.0 – 32bit and 64bit ( Deprecated )

Cannot create an instance of OLE DB provider Microsoft.Jet.OLEDB.4.0 for linked server null

Cannot create instance of “Microsoft.ACE.OLEDB.12.0” for linked server “(null)” on x64 Vista with x64 SQL Server 2008 – sp_MSSet_oledb_prop

How to Import and Export SQL Server data to an Excel file

T-SQL OpenDataSource on SQL Server 2017

Import data from Excel to SQL Server or Azure SQL Database

Permissions needed to set up linked server with out-of-process provider