Принудительное добавление / удаление связанного сервера и правильный синтаксис для импорта данных в таблицу из Excel - PullRequest
1 голос
/ 16 августа 2010

Я пытаюсь создать связанный сервер в Sql server 2008 R2, только что попытался загрузить 64-битную версию Office 2010 Access AD Engine от Microsoft.

К сожалению, я попытался добавить связанный сервер, ДО того, как сделать эту установку, и это не удалось:

EXEC sp_addlinkedserver 'LinkedServer1', 'Excel', 'Microsoft.Jet.OLEDB.4.0', 'D:\Folder\Excel1.xls', '', 'Excel 8.0', ''

(дайте мне знать, если этот способ добавления неправильный, если у вас есть другой способ сделать это!)

После завершения загрузки выдает сообщение о том, что этот сервер уже существует: "Для сервера 'LinkedServer1' все еще существуют удаленные или связанные логины."

Попытка добавить 'LinkedServer2' таким же образом ПОСЛЕ загрузки (в качестве параметра использовался Excel5.0 вместо Excel8.0). Оно работает! Тем не менее, этот старый связанный сервер, похоже, все еще существует, хотя я пытался удалить его:

Чтобы быть уверенным, что это действительно там, я написал это:

select * from sys.servers where is_linked =1 

и свойства в деталях:

 server_id: 1
 name= LinkedServer1
 product= Excel
 provider = Microsoft.Jet.OLEDB.4.0
 data_source= D:\Folder\Excel1.xls
 location:NULL 
 provider_string: Excel 8.0 
 is_linked=1 
 is_data_access_enabled=1
 modify_date= 2010-08-15 19:56:02.307

Дайте мне знать, если вы заметили, что я делаю что-то не так! Я попытался сбросить LinkedServer2, все работает! Тем не менее, даже когда я пытаюсь удалить тот же связанный сервер1, как это:

Exec sp_dropserver @server = 'LinkedServer1'

терпит неудачу на мне, то же самое сообщение! "Для сервера 'LinkedServer1' все еще существуют удаленные или связанные логины."

Попытка добавления связанного сервера с использованием строки поставщика в качестве «Excel 5.0», и она была успешно добавлена ​​и удалена.


Еще одно обновление: Это снова не удается: EXEC ('INSERT INTO Table1 ВЫБЕРИТЕ col1, excel2col, excel3col, Заменить (Заменить (excel4col, '' '' ',' '' ') FROM OPENROWSET ('' Microsoft.Jet.OLEDB.4.0 '', '' Excel 5.0; HDR = Да; База данных = '+' D: \ Folder \ Excel1.xls '', [Sheet2 $]) ')

Ошибка: Поставщик OLE DB «Microsoft.Jet.OLEDB.4.0» не может использоваться для распределенных запросов, поскольку поставщик настроен для работы в однопоточном режиме квартиры. Я изменил конфигурацию на:

EXEC sp_configure 'Ad Hoc Distributed Queries', 1;
GO
RECONFIGURE;

1 Ответ

0 голосов
/ 16 августа 2010

Похоже, проблема 64-битного / Sql Server R2:

чтобы явно удалить связанный сервер, мы должны использовать: sp_dropserver 'LinkedServer1', 'droplogins';

Это решает проблему неверного связанного сервера. однако Microsoft.jet.OLEDB.4 не работает, продолжает появляться та же ошибка:

<Errors> <Error>ERROR CAUGHT: OLE DB provider 'Microsoft.Jet.OLEDB.4.0' cannot be used for distributed queries because the provider is configured to run in single-threaded apartment mode.</Error> </Errors>

Попытка загрузки Microsoft.ACE.OLEDB.12.0 и использование этого для добавления связанного сервера. Однако, когда я пытаюсь выполнить вставку в таблицу с помощью OpenRowSet, появляется новая ошибка:

    Msg 7399, Level 16, State 1, Line 1
The OLE DB provider "Microsoft.ACE.OLEDB.12.0" for linked server "(null)" reported an error. Access denied.
Msg 7301, Level 16, State 2, Line 1
Cannot obtain the required interface ("IID_IDBCreateCommand") from OLE DB provider "Microsoft.ACE.OLEDB.12.0" for linked server "(null)".

Кто-нибудь сталкивался с этим раньше или знает, как это решить?

...