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

Откуда:
Сообщений: 41
Делаю простой запрос:
SELECT *
FROM OPENROWSET (
	'Microsoft.ACE.OLEDB.12.0',
	'EXCEL 12.0; database=C:\Data\Book1.xlsx',
	'SELECT * FROM [Sheet1$]'
) AS S


Запрос зависает (делает вид что выполняется, и вечно висит, сколько ни жди).
Когда киляю с помощью kill, не реагирует. Приходится рестартить службу скл сервера.
Тестирую на простейшем эксель-файле с 1 столбцом 1 строчкой.
Путь к файлу проверил, все правильно, имя листа правильно.
Полные права на эту папку SQL Server-у даны, на темповые папки тоже.

На серваке установлен Excel 2016 и Access Runtime (битность 64 соблюдена у excel, драйвера и sql server).
Свежие SP для SQL Server 2016 установлены.
Когда делаю linked server через Create new в SSMS - зависает аналогично!
Ошибок нигде и никаких.

это тоже все пробовал и так и эдак
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
EXEC master.dbo.sp_MSset_oledb_prop N'Microsoft.ACE.OLEDB.16.0' , N'AllowInProcess' , 1
GO
EXEC master.dbo.sp_MSset_oledb_prop N'Microsoft.ACE.OLEDB.16.0' , N'DynamicParameters' , 1
GO
exec sp_configure 'Show Advanced Options', 1
RECONFIGURE
exec sp_configure 'Ad Hoc Distributed Queries', 1
RECONFIGURE 


EXEC master.dbo.sp_MSset_oledb_prop N'Microsoft.ACE.OLEDB.12.0' , N'AllowInProcess' , 0
EXEC master.dbo.sp_MSset_oledb_prop N'Microsoft.ACE.OLEDB.16.0' , N'AllowInProcess' , 0


Куда копать?

Сообщение было отредактировано: 10 июн 21, 15:29
10 июн 21, 15:32    [22333892]     Ответить | Цитировать Сообщить модератору
 Re: Зависает запрос OPENROWSET к Excel-файлу  [new]
Кроик Семён
Member

Откуда: СПб --> Dortmund
Сообщений: 6745
newbie876454,

нагуглилось
здесь: Microsoft ACE OLEDB 12.0 X64 Driver freezing using open rowset


I have struggled with this on-and-off over a number of years. Even though SQL Server and Excel are best-of-breed products that have been around for 20 years or more, it is a cumbersome and error-prone process to import data from Excel into SQL Server. There are many pages of information on the web (probably 1000's) that attest to the difficulties that folks encounter when importing into SQL Server, and it is very disappointing that Microsoft cannot make the effort to ensure these products work together.

Anyway I have found some things that help:

* Apply the SQL Server configuration settings to allow ad-hoc distributed queries
* Use the Microsoft.Ace.OLEDB.12.0 drivers for xls and xlsx files
* Install the Microsoft Access Database Engine 2010 Redistributable (64 bit version), this requires there to be no 32 bit version of Office on the computer
* Use sp_MSset_oledb_prop to set AllowInProcess = 1 (without this option, OPENROWSET sometimes causes the SQL Server Service to stop running)
* Add the -g256 or -g512 startup parameter to the SQL Server Service (this gives more memory for the ACE drivers)

It would be really useful if Microsoft could fully support importing Excel files into SQL Server.
10 июн 21, 17:40    [22333978]     Ответить | Цитировать Сообщить модератору
 Re: Зависает запрос OPENROWSET к Excel-файлу  [new]
Piles
Member

Откуда:
Сообщений: 8
попробуйте:
1. перед каждым чтением данных из excel открыть новое соединение, после закрыть.
2. установить предыдущий драйвер офиса - AccessDatabaseEngine_X64_2010
11 июн 21, 09:40    [22334181]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить