Проблема:
При выполнении запроса из связанного сервера через openrowset:
select * FROM OPENROWSET('Microsoft.ACE.OLEDB.12.0', 'Excel 12.0;Database=C:\temp\Таблица соответ.xlsx', [Лист1$])
останавливается служба сервера и в панели результата запроса выходит сообщение об ошибке:
Сообщение 109, уровень 20, состояние 0, строка 0
Ошибка на транспортном уровне при получении результатов с сервера. (provider: Shared Memory Provider, error: 0 — Канал был закрыт.)
На сервере установлен MSSQL 2012 SP4.
Решение:
Чтобы сервер не крашился нужно установить хотфикс:
Прямая ссылка на хотфикс: https://support.microsoft.com/ru-ru/hotfix/kbhotfix?kbnum=2859413&kbln=en-US
После этого запрос стал выдавать следующую ошибку:
Не удалось получить требуемый интерфейс («IID_IDBCreateCommand») от поставщика OLE DB «Microsoft.ACE.OLEDB.12.0» для связанного сервера
Данную проблему удалось решить следующим образом:
В свойствах провайдера нужно включит галочку: Allow inprocess (Допускать в ходе процесса)
Далее ПУСК — выполнить: Dcomcnfg
Службы компонентов — Мой компьютер — Настройка DCOM — MSDAINITIALIZE, щелкаем правой кнопкой, переходим на вкладку безопасность и во всех трёх группах переводим пульку на «Настроить», в каждой группе щелкаем кнопку «Изменить» и если у вас служба сервера стартует под учетной записью MSSQLSERVER, добавляем в каждой группе полные права для этой учетной записи. После этого запрос стал выполняться правильно.
Хах, для 19 SQL-сервера такая-же ошибка возникает, но хот-фикс уже не доступен. Весело прям.