2016-05-02 5 views
13

Я пытаюсь экспортировать из моих Table данных в через T-SQL запрос. После небольшого исследования я пришел с этимНевозможно создать экземпляр поставщика OLE DB Microsoft.Jet.OLEDB.4.0 для связанного сервера null

INSERT INTO OPENROWSET ('Microsoft.Jet.OLEDB.4.0', 
         'Excel 8.0;Database=G:\Test.xls;', 
         'SELECT * FROM [Sheet1$]') 
SELECT * 
FROM dbo.products 

Выполнения выше запрос я получаю эту ошибку

Msg 7302, уровень 16, состояние 1, строка 7 Не удается создать экземпляр OLE DB провайдер «Microsoft.Jet.OLEDB.4.0» для связанного сервера «(null)».

Так пошли через интернет для решения, получил ссылку ниже

https://blogs.msdn.microsoft.com/spike/2008/07/23/ole-db-provider-microsoft-jet-oledb-4-0-for-linked-server-null-returned-message-unspecified-error/

В приведенной выше ссылке они говорили, что мы должны быть администратором, чтобы создать папку в диске СTEMP папки так OPENROWSET создает некоторые файлы или папки внутри TEMP папка

Я делаю это на своем домашнем ПК, и я администратор. Тем не менее я получаю ту же ошибку.

SQL SERVER детали

Microsoft SQL Server 2016 (RC1) - 13.0.1200.242 (X64) 10 марта 2016 16:49:45 Copyright (с) Корпорация Microsoft Enterprise Evaluation Edition (64 -битовый) на ОС Windows 10 Pro 6.3 (Build 10586:)

Есть указатели, чтобы исправить эту проблему будет высоко оценен

Update: Я уже настроен Ad Hoc Distributed Queries и

Выполненный ниже запросов

EXEC master.dbo.sp_MSset_oledb_prop N'Microsoft.Jet.OLEDB.4.0', N'AllowInProcess', 1 
GO 
EXEC master.dbo.sp_MSset_oledb_prop N'Microsoft.Jet.OLEDB.4.0', N'DynamicParameters', 1 
GO 

Теперь я получаю эту ошибку

Msg 7438, Level 16, состояние 1, строка 7 32 -битный поставщик OLE DB «Microsoft.Jet.OLEDB.4.0» не может быть загружен в процессе на 64-разрядном сервере SQL .

+0

Это SO ссылка может помочь вам. - http://stackoverflow.com/questions/12090555/get-excel-sheet-into-temp-table-using-a-script –

+0

Другая вещь, которую я замечаю, в вашем заявлении insert вместо 'SELECT * FROM dbo.products ', это должно быть -' INSERT INTO OPENROWSET ('Microsoft.Jet.OLEDB.4.0', 'Excel 8.0; Database = G: \ Test.xls;', 'SELECT * FROM [Sheet1 $]') ' –

+0

@KrishnrajRana - Без разницы, все еще получаю ту же ошибку :( –

ответ

21

ОК, я сделал это работает для меня , и похоже, что SO позволит мне опубликовать сегодня.

У меня есть сервер MS Sql 2012 и Office 2013. Это кажется очень тонким, поэтому вам, возможно, придется приспособиться к вашим конкретным версиям.

  1. Скачать Microsoft.ACE.OLEDB.12.0 для Windows, 64 разрядная версия здесь: https://www.microsoft.com/en-us/download/details.aspx?id=13255
  2. Установите его на своем сервере.
  3. Проверьте пользователя, выполняющего SQL Server, и убедитесь, что у пользователя есть доступ к временному каталогу C: \ Windows \ ServiceProfiles \ LocalService \ AppData \ Local \ Temp, если это локальная учетная запись службы или C: \ Windows \ ServiceProfiles \ NetworkService \ AppData \ Local \ Temp, если это учетная запись сетевой службы.
  4. Настройка 'Ad Hoc Distributed Queries' и включить Microsoft.ACE.OLEDB файлы, как это:

Вот в sp_configure команды:

SP_CONFIGURE 'show advanced options', 1; 
GO 
RECONFIGURE; 
SP_CONFIGURE 'Ad Hoc Distributed Queries', 1; 
GO 
RECONFIGURE; 
EXEC sp_MSset_oledb_prop N'Microsoft.ACE.OLEDB.12.0', N'AllowInProcess', 1 
EXEC sp_MSset_oledb_prop N'Microsoft.ACE.OLEDB.12.0', N'DynamicParam', 1 

Убедитесь, что вы регистрируетесь msexcl40.dll как это:

regsvr32 C:\Windows\SysWOW64\msexcl40.dll 
+0

Извините. Я попытаюсь поставить остальную часть этого в комментарии. Я думаю, что я был защищен от публикации слишком длинной строки. – quest4truth

+0

Вот команды SP_CONFIGURE: 'SP_CONFIGURE 'показать дополнительные параметры', 1; GO RECONFIGURE; SP_CONFIGURE «Специальные распределенные запросы», 1; GO RECONFIGURE; EXEC sp_MSset_oledb_prop N'Microsoft.ACE.OLEDB.12.0' , N'AllowInProcess', 1 EXEC sp_MSset_oledb_prop N'Microsoft.ACE.OLEDB.12.0' , N'DynamicParam», 1 ' – quest4truth

+0

Убедитесь, что вы регистрируетесь msexcl40.dll например: 'regsvr32 C: \ Windows \ SysWOW64 \ msexcl40.dll' – quest4truth

2

Отъезд sp_configure/RECONFIGURE ...

sp_configure 'show advanced options', 1; 
GO 
RECONFIGURE; 
GO 
sp_configure 'Ad Hoc Distributed Queries', 1; 
GO 
RECONFIGURE; 
GO 

Смотрите эти ссылки для получения дополнительной информации:

https://technet.microsoft.com/en-us/library/aa259616(v=sql.80).aspx

http://blog.sqlauthority.com/2010/11/03/sql-server-fix-error-ms-jet-oledb-4-0-cannot-be-used-for-distributed-queries-because-the-provider-is-used-to-run-in-apartment-mode/

0

Работы !!! Большое спасибо. Только для 64-битного Win Server 2012R2. Позвольте мне поместить весь рабочий скрипт, частично повторяя биты сверху, которые нелегко (как для меня) объединить вместе:

1) Загрузите версию Microsoft.ACE.OLEDB.12.0 для Windows, 64-разрядную версию, найденную здесь: https://www.microsoft.com/en-us/download/details.aspx?id=13255

2) Создайте файл excel с соответствующими столбцами (имя и класс в этом случае).

3) Выполнить код ниже:

sp_configure 'show advanced options', 1; 
RECONFIGURE; 
GO 
sp_configure 'Ad Hoc Distributed Queries', 1; 
RECONFIGURE; 
GO 

/* -- Not sure commented bits are necessary but I also have run them 
EXEC master.dbo.sp_MSset_oledb_prop N'Microsoft.Jet.OLEDB.4.0', N'AllowInProcess', 1 
GO 
EXEC master.dbo.sp_MSset_oledb_prop N'Microsoft.Jet.OLEDB.4.0', N'DynamicParameters', 1 
GO 

-- below two lines failed with: Msg 2787, Level 16, State 1, Procedure sp_MSset_oledb_prop, Line 106 Invalid format specification: '%1!.'. 
    EXEC sp_MSset_oledb_prop N'Microsoft.ACE.OLEDB.12.0', N'AllowInProcess', 1 
EXEC sp_MSset_oledb_prop N'Microsoft.ACE.OLEDB.12.0', N'DynamicParam', 1 

-- but works all two as below: 
EXEC sp_MSset_oledb_prop N'Microsoft.ACE.OLEDB.12.0', N'AllowInProcess', 1 
EXEC sp_MSset_oledb_prop N'Microsoft.ACE.OLEDB.12.0', N'DynamicParameters', 1 
-- Succeded to run after success with Excel so does not looks like necessary 


*/ 

INSERT INTO OPENROWSET('Microsoft.ACE.OLEDB.12.0', 
'Excel 8.0;Database=C:\testing.xlsx;', 
'SELECT Name, Class FROM [Sheet1$]') 
SELECT [Name],[Class] FROM Qry_2 
GO 
-1

Пожалуйста, выполните следующие запросы:

EXEC master.dbo.sp_MSset_oledb_prop N'Microsoft.Jet.OLEDB.4.0' , N'AllowInProcess', 1 GO EXEC master.dbo.sp_MSset_oledb_prop N'Microsoft.Jet.OLEDB.4.0' , N'DynamicParameters', 1 GO