Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Ошибка при работе с openrowset  [new]
chaika2610
Member

Откуда:
Сообщений: 7
Добрый день, коллеги!

Пытаюсь произвести выгрузку из файла Excel в SQL SERVER с помощью openrowset. Данное действие выполнял на SQL Server 2012, на SQL Server 2008 R2. Excel файл сохранял в версиях: 2007,97-2003, 95.

Связанные сервера мне делать не нужно, поскольку файлы excel будут всегда разные и находиться в разных местах.
На сайте msdn (http://msdn.microsoft.com/ru-ru/library/ms190312.aspx) написано, что данный метод является альтернативой связанным серверам.

Нашел код:
sp_configure 'show advanced options', 1;
reconfigure
go
exec sp_configure 'Ad Hoc Distributed Queries', '1';
reconfigure
go

Для Excel 97-2003, 95 пробовал код:
SELECT * FROM OPENROWSET('Microsoft.Jet.OLEDB.4.0','Excel 8.0;Database=C:\123.xls', [L$])

Для Excel 2007 пробовал код:
select * from OpenrowSet('Microsoft.ACE.OLEDB.12.0', 'Excel 12.0;Database=C:\123.xlsx', 'SELECT * FROM [L$]')

, где C:\123.xls – файл Excel, L-имя листа excel

При выполнении данного скрипта возникает ошибка: «Msg 7302, Level 16, State 1, Line 1 Cannot create an instance of OLE DB provider "Microsoft.Jet.OLEDB.4.0" for linked server "(null)".»

Во всех инструкциях и статьях на форумах, что я видел, используется этот скрипт, и ничего другого докладчики не делают.



Коллеги, подскажите, что я не учитываю, почему возникает эта ошибка?
16 янв 15, 18:11    [17129780]     Ответить | Цитировать Сообщить модератору
 Re: Ошибка при работе с openrowset  [new]
Glory
Member

Откуда:
Сообщений: 104760
Начните с публикации полной версии вашего сервера
16 янв 15, 18:13    [17129793]     Ответить | Цитировать Сообщить модератору
 Re: Ошибка при работе с openrowset  [new]
chaika2610
Member

Откуда:
Сообщений: 7
Glory,

Microsoft SQL Server 2008 R2 (RTM) - 10.50.1600.1 (X64) Apr 2 2010 15:48:46 Copyright (c) Microsoft Corporation Enterprise Edition (64-bit) on Windows NT 6.1 <X64> (Build 7601: Service Pack 1)
16 янв 15, 20:22    [17130465]     Ответить | Цитировать Сообщить модератору
 Re: Ошибка при работе с openrowset  [new]
guest45
Guest
chaika2610,

connectionstrings.com
17 янв 15, 17:52    [17132443]     Ответить | Цитировать Сообщить модератору
 Re: Ошибка при работе с openrowset  [new]
Glory
Member

Откуда:
Сообщений: 104760
chaika2610
(X64)

64битный сервер может работать только с 64битными драйверами
А Microsoft.Jet.OLEDB не является 64битным драйвером
17 янв 15, 20:06    [17132666]     Ответить | Цитировать Сообщить модератору
 Re: Ошибка при работе с openrowset  [new]
chaika2610
Member

Откуда:
Сообщений: 7
Glory,

При использовании Microsoft.ACE.OLEDB.12.0 выдется аналогичная ошибка, но он ведь рассчитан на 64 версии

Ошибка: "Не удалось создать экземпляр поставщика OLE DB "Microsoft.ACE.OLEDB.12.0" для связанного сервера "(null)"."
18 янв 15, 08:57    [17133588]     Ответить | Цитировать Сообщить модератору
 Re: Ошибка при работе с openrowset  [new]
chaika2610
Member

Откуда:
Сообщений: 7
guest45,

Воспользовался материалом из ссылки, адаптировал код

SELECT * FROM OPENROWSET('Microsoft.ACE.OLEDB.12.0','Excel 8.0;HDR=YES;Database=C:\123.xls', [L$])
SELECT * FROM OPENROWSET('Microsoft.ACE.OLEDB.12.0','Excel 12.0 Xml;HDR=YES;Database=C:\123.xlsx', [L$])
SELECT * FROM OPENROWSET('Microsoft.ACE.OLEDB.12.0','Excel 12.0 Xml;HDR=YES;Database=C:\123.xlsx', 'SELECT * FROM [L$]')

В итоге ошибка прежняя:
"Сообщение 7302, уровень 16, состояние 1, строка 1
Не удалось создать экземпляр поставщика OLE DB "Microsoft.ACE.OLEDB.12.0" для связанного сервера "(null)"."
18 янв 15, 09:23    [17133592]     Ответить | Цитировать Сообщить модератору
 Re: Ошибка при работе с openrowset  [new]
chaika2610
Member

Откуда:
Сообщений: 7
Кстати, коллеги, когда я произвожу загрузку в ручную, он мне перед выполнением формирует сведения об импорте:

Нажмите кнопку "Готово" для выполнения следующих действий:


Исходное расположение: C:\123.xls
Исходный поставщик: Microsoft.Jet.OLEDB.4.0
Целевое расположение: DIK-ПК
Целевой поставщик: SQLNCLI10

• Копировать строки с `L$` по [dbo].[L]
Будет создана новая целевая таблица.

• Пакет будет сохранен в файле пакета "C:\Users\DIK\Desktop\Новый пакет1.dtsx".
• Пакет будет запущен немедленно.

Файл сопоставления поставщика: C:\Program Files (x86)\Microsoft SQL Server\100\DTS\MappingFiles\JetToMSSql9.xml


При импорте в ручном режиме все работает.
18 янв 15, 09:59    [17133602]     Ответить | Цитировать Сообщить модератору
 Re: Ошибка при работе с openrowset  [new]
Glory
Member

Откуда:
Сообщений: 104760
chaika2610
В итоге ошибка прежняя

Она будет такой же, пока вы будете продолжать попытки заставить 64битный сервер работать с 32битными драйверами

chaika2610
При импорте в ручном режиме все работает.

Разумеется, 32хбитное приложение "ручного импорта" прекрасно работает с 32битными драйверами
18 янв 15, 12:18    [17133704]     Ответить | Цитировать Сообщить модератору
 Re: Ошибка при работе с openrowset  [new]
chaika2610
Member

Откуда:
Сообщений: 7
Хорошо, каким механизмом тогда в моем случае можно воспользоваться?
18 янв 15, 17:34    [17134383]     Ответить | Цитировать Сообщить модератору
 Re: Ошибка при работе с openrowset  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31438
chaika2610
Хорошо, каким механизмом тогда в моем случае можно воспользоваться?
Одним из следующих:
1) Найти и установить 64 битный драйвер
2) Использовать 32 битную программу импорта (например, SSIS)
3) Установить 32 битный инстанс, и импортить через него, через дополнительный linked-server
18 янв 15, 20:08    [17134673]     Ответить | Цитировать Сообщить модератору
 Re: Ошибка при работе с openrowset  [new]
chaika2610
Member

Откуда:
Сообщений: 7
alexeyvg,

Спасибо, попробую.
19 янв 15, 08:37    [17135612]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить