Есть несколько вещей, которые вы можете сделать.
Ниже приведен скрипт для переноса данных из Excel 2003:
SELECT * FROM OPENROWSET('Microsoft.Jet.OLEDB.4.0'
,'Excel 4.0;Database=D:\test.xls','SELECT * FROM [sheet1$]')
Но, когда тот же код используется для Excel 2007и выше он выдает следующую ошибку:
SELECT * FROM OPENROWSET('Microsoft.Jet.OLEDB.4.0'
,'Excel 4.0;Database=D:\test.xlsx','SELECT * FROM [sheet1$]')
Сообщение 7399, уровень 16, состояние 1, строка 1 Поставщик OLE DB «Microsoft.Jet.OLEDB.4.0» для связанного сервера «(ноль)»сообщил об ошибке.Поставщик не предоставил никакой информации об ошибке.Сообщение 7303, уровень 16, состояние 1, строка 1 Не удается инициализировать объект источника данных поставщика OLE DB «Microsoft.Jet.OLEDB.4.0» для связанного сервера «(ноль)».
Позволяет решить этот шаг проблемышаг за шагом.
Шаг 1. Загрузите Microsoft Access Database Engine 2010
Шаг 2. Установите Microsoft Access Database Engine 2010 на своем компьютере.
Шаг 3. Откройте SQL Server ManagementСтудия.(Если он уже открыт, закройте и снова откройте его)
Шаг 4. Включите специальные запросы.
sp_configure 'show advanced options', 1;
RECONFIGURE;
sp_configure 'Ad Hoc Distributed Queries', 1;
RECONFIGURE;
GO
Шаг 5. Закройте лист Excel, который необходимо импортировать (если он открыт).
Шаг 6: Укажите правильный путь, имя файла и имя листа Excel со знаком $ в приведенном ниже сценарии и выполните запрос.Эта информация должна быть правильной.
SELECT * FROM OPENROWSET ('Microsoft.ACE.OLEDB.12.0',
'Excel 12.0;Database=E:\test.xlsx;HDR=YES;IMEX=1',
'SELECT * FROM [sheet1$]');
Если ваша первая строка имеет имя столбца, то “HDR=YES“
, в противном случае это должен быть номер
В случае, если вам нужен этот результат запроса во временных таблицахниже приведен скрипт для вставки записей Excel в временную таблицу.
SELECT * into Temp FROM OPENROWSET ('Microsoft.ACE.OLEDB.12.0',
'Excel 12.0;Database=E:\test.xlsx;HDR=YES;IMEX=1',
'SELECT * FROM [sheet1$]');
Или, аналогично ...
---- Has column names
SELECT * FROM OPENROWSET ('Microsoft.ACE.OLEDB.12.0', 'Excel 12.0;Database=E:\test.xlsx;HDR=YES;IMEX=1', 'SELECT * FROM [sheet1$]');
---- Does not have column names
SELECT * FROM OPENROWSET ('Microsoft.ACE.OLEDB.12.0', 'Excel 12.0;Database=E:\test.xlsx;HDR=NO;IMEX=1', 'SELECT * FROM [sheet2$]');
---- Does not have column names
SELECT * FROM OPENROWSET ('Microsoft.ACE.OLEDB.12.0', 'Excel 12.0;Database=E:\test.xlsx;HDR=NO;IMEX=1', 'SELECT * FROM [sheet3$]');