Подключение файлов MS Excel — различия между версиями
Строка 1: | Строка 1: | ||
[[Дополнительно|Наверх]] | [[Дополнительно|Наверх]] | ||
+ | |||
+ | ==Подключение с помощью Microsoft.ACE.OLEDB.12.0== | ||
В данной статье описывается пример подключения Excel-файла '''sample.xlsx''' на примере сервера '''MSSQL 2008 SP3 x64'''. | В данной статье описывается пример подключения Excel-файла '''sample.xlsx''' на примере сервера '''MSSQL 2008 SP3 x64'''. | ||
Строка 50: | Строка 52: | ||
Используемые материалы: http://habrahabr.ru/post/219415/ и [http://social.msdn.microsoft.com/Forums/sqlserver/en-US/bb2dc720-f8f9-4b93-b5d1-cfb4f8a8b1cb/the-ole-db-provider-microsoftaceoledb120-for-linked-server-null-reported-an-error-access?forum=sqldataaccess http://social.msdn.microsoft.com] | Используемые материалы: http://habrahabr.ru/post/219415/ и [http://social.msdn.microsoft.com/Forums/sqlserver/en-US/bb2dc720-f8f9-4b93-b5d1-cfb4f8a8b1cb/the-ole-db-provider-microsoftaceoledb120-for-linked-server-null-reported-an-error-access?forum=sqldataaccess http://social.msdn.microsoft.com] | ||
+ | |||
+ | |||
+ | ==Подключение с помощью Microsoft Jet 4.0 Ole DB Provider == | ||
+ | |||
+ | Технология Jet 4.0 работает только на 32-битных версиях MSSQL. | ||
+ | |||
+ | <span style="color:red;">ВНИМАНИЕ! В графу Provider string необходимо занести значение «Excel 8.0»</span> | ||
+ | |||
+ | |||
+ | [[Файл:ПодклЭкс1.PNG|center]] | ||
+ | |||
+ | |||
+ | При использовании динамического подключения через системные хранимые процедуры: | ||
+ | |||
+ | <pre> | ||
+ | EXEC sp_addlinkedserver 'ExcelSource', 'Jet 4.0', 'Microsoft.Jet.OLEDB.4.0', | ||
+ | |||
+ | 'c:\MyData\DistExcl.xls', NULL, 'Excel 8.0' | ||
+ | |||
+ | EXEC sp_addlinkedsrvlogin 'ExcelSource', 'false', NULL, NULL | ||
+ | |||
+ | </pre> | ||
+ | |||
+ | |||
+ | Для получения данных из Excel необходимо, чтобы исходный XLS файл с данными содержал именованные диапазоны. | ||
+ | |||
+ | |||
+ | [[Файл:ПодклЭкс2.PNG|center]] | ||
+ | |||
+ | |||
+ | [[Файл:sql_link4.png|center|750px]] | ||
+ | |||
+ | |||
+ | '''Пример запроса:''' | ||
+ | <pre> | ||
+ | Select * From [Excel]...[Лист1$]</pre> |
Версия 08:54, 30 сентября 2014
Подключение с помощью Microsoft.ACE.OLEDB.12.0
В данной статье описывается пример подключения Excel-файла sample.xlsx на примере сервера MSSQL 2008 SP3 x64.
Шаг 1. Для начала работы скачайте провайдера Microsoft.ACE.OLEDB.12.0 по ссылке http://www.microsoft.com/en-us/download/details.aspx?id=13255.
Если у вас 64-битная версия SQL Server используйте установочный файл AccessDatabaseEngine_x64.exe.
Шаг 2. Для установки провайдера используйте запуск файла через командную строку с ключом /passive.
C:\AccessDatabaseEngine_x64.exe /passive
Шаг 3. Чтобы прилинковать Excel файл выполните следующие запросы в SQL Server Management Studio
exec sp_addlinkedserver @server = 'XlsLnkSrv', @srvproduct = 'ACE 12.0', @provider = 'Microsoft.ACE.OLEDB.12.0', @datasrc = 'C:\Sample.xlsx', @provstr = 'Excel 12.0; HDR=Yes'
где
- XlsLnkSrv - название связанного сервера
- C:\Sample.xlsx - абсолютный путь к требуемому Excel-файлу
Считать данные можно с помощью команды
select * from openquery (XlsLnkSrv, 'Select * from [Sheet1$]')
ВНИМАНИЕ: При возникновении ошибки Cannot get the column information from OLE DB provider "Microsoft.ACE.OLEDB.12.0" for linked server "(null)" выполните следующий запрос:
USE [master] GO EXEC master . dbo. sp_MSset_oledb_prop N'Microsoft.ACE.OLEDB.12.0' , N'AllowInProcess' , 1 GO EXEC master . dbo. sp_MSset_oledb_prop N'Microsoft.ACE.OLEDB.12.0' , N'DynamicParameters' , 1 GO
Используемые материалы: http://habrahabr.ru/post/219415/ и http://social.msdn.microsoft.com
Подключение с помощью Microsoft Jet 4.0 Ole DB Provider
Технология Jet 4.0 работает только на 32-битных версиях MSSQL.
ВНИМАНИЕ! В графу Provider string необходимо занести значение «Excel 8.0»
При использовании динамического подключения через системные хранимые процедуры:
EXEC sp_addlinkedserver 'ExcelSource', 'Jet 4.0', 'Microsoft.Jet.OLEDB.4.0', 'c:\MyData\DistExcl.xls', NULL, 'Excel 8.0' EXEC sp_addlinkedsrvlogin 'ExcelSource', 'false', NULL, NULL
Для получения данных из Excel необходимо, чтобы исходный XLS файл с данными содержал именованные диапазоны.
Пример запроса:
Select * From [Excel]...[Лист1$]