Импортируя несколько листов Excel в одну таблицу в базе данных SQL, только один лист имеет заголовок - PullRequest
0 голосов
/ 26 мая 2018

У меня есть файл Excel, созданный другой программой, которая имеет несколько листов Excel.Структура столбцов такая же, за исключением того, что заголовок есть только у первого листа, остальные просто продолжают с того места, где заканчивался последний лист - это формат xls, который допускает только 65,563 строк на лист.

Я хочу импортироватьони в одной таблице в SQL Server Management Studio.

Я новичок в SSMS, поэтому не знаю точно, с чего начать.

Можете ли вы помочь?

Спасибо

Ответы [ 2 ]

0 голосов
/ 19 июля 2018

Есть несколько вещей, которые вы можете сделать.

Ниже приведен скрипт для переноса данных из 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$]'); 
0 голосов
/ 26 мая 2018

Я думаю, у меня есть для тебя учебник.Это поможет вам быстро вставить запись из Excel в базу данных.

Это пример кода:

    INSERT INTO Employee
SELECT *
FROM OPENROWSET('Microsoft.ACE.OLEDB.12.0',
  'Excel 12.0 Xml; HDR=YES; IMEX=1;
   Database=C:\DataFiles\EmployeeData1.xlsx',
   [vEmployee$]);

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

Или вы также можете сделать этопуть: Учебник для Excel к базе данных

...