Импорт нескольких листов Excel в одну таблицу в базе данных SQL, только один лист имеет заголовок
У меня есть файл Excel, созданный другой программой, которая имеет несколько листов Excel. Структура столбцов такая же, за исключением того, что заголовок есть только у первого листа, остальные просто продолжают с того места, где заканчивался последний лист - это формат xls, который допускает только 65.563 строк на лист.
Я хочу импортировать их в одну таблицу в SQL Server Management Studio.
Я новичок в SSMS, поэтому не знаю точно, с чего начать.
Вы можете помочь?
Спасибо
2 ответа
Я думаю, что у меня есть учебник для вас. Это поможет вам быстро вставить запись из 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 для базы данных
Есть несколько вещей, которые вы можете сделать.
Ниже приведен скрипт для переноса данных из 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" для связанного сервера "(null)" сообщил об ошибке. Поставщик не предоставил никакой информации об ошибке. Сообщение 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 Studio. (Если уже открыт, закройте и снова откройте)
Шаг 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$]');