Импорт данных Excel в SQL Server 2008 - PullRequest
0 голосов
/ 11 января 2012

Мне нужно импортировать данные из Excel в мою базу данных. Мне нужно вставить данные из моего листа Excel в существующую таблицу в моей базе данных.

Я попытался импортировать данные с помощью мастера sql. Сначала я импортировал его во временную таблицу, а затем использовал запрос на вставку для импорта данных в таблицу назначения. Но, похоже, он не работал правильно.

Итак, плз, предложите мне хороший способ импорта данных. А также было бы лучше, если бы вы предложили хороший SQL-скрипт для импорта.

Ответы [ 6 ]

3 голосов
/ 01 ноября 2012

Для файла Excel 2007 версии (* .xlsx)

INSERT INTO MyTable
SELECT * FROM OPENROWSET('Microsoft.ACE.OLEDB.12.0',
'Excel 12.0;Database=D:\test.xlsx', [Customer$])

Для файла Excel 97-2003 версии (* .xls)

INSERT INTO MyTable
SELECT * FROM OPENROWSET('Microsoft.Jet.OLEDB.4.0',
'Excel 8.0;Database=D:\test.xls', [Customer$])
1 голос
/ 09 февраля 2012

Я попытался использовать предыдущий ответ для файла .xlsx (версия 14.0.6112.2500, 64-разрядный файл Microsoft Excel)

SELECT * 
FROM OPENROWSET('Microsoft.Jet.OLEDB.4.0',
'Excel 8.0;Database=C:\xls_to_sql\xltest.xlsx', [Sheet1$])

Затем я сохранил электронную таблицу как .xls (97-2003версия) и попробовал еще раз.

SELECT * 
FROM OPENROWSET('Microsoft.Jet.OLEDB.4.0',
'Excel 8.0;Database=C:\xls_to_sql\xltest.xls', [Sheet1$])

Bot раз я получил то же сообщение об ошибке:

 Msg 7308, Level 16, State 1, Line 1
 OLE DB provider 'Microsoft.Jet.OLEDB.4.0' cannot be used for distributed queries because the provider is configured to run in single-threaded apartment mode.

Информация SQL SERVER:

Microsoft SQL Server ManagementStudio 10.50.1617.0 Инструменты клиента служб аналитики Microsoft 10.50.1617.0 Компоненты доступа к данным Microsoft (MDAC) 6.1.7601.17514 Microsoft MSXML 2.6 3.0 6.0 Microsoft Internet Explorer 9.0.8112.16421 Microsoft .NET Framework 2.0.50727.5448 Операционная система 6.1.7601

У меня нет Microsoft.Jet.OLEDB.4.0 или, по крайней мере, я не знаю, как его получить.Я также не знаю, как запустить все в 32-битном режиме, если это является причиной проблемы.Я был бы признателен за помощь в работе в 32-разрядном режиме, а также за загрузку и установку Microsoft.Jet.OLEDB.4.0, если по какой-то причине он у меня не установлен.

Я попробовал метод связанного сервера, который, как я видел, опубликован дляSQL Server 2005, но нет опции Microsoft.Jet.OLEDB.4.0, упомянутой в руководстве.См http://support.microsoft.com/kb/321686.

0 голосов
/ 26 сентября 2014

Если вам нужно импортировать .xlsx в 64-битный SQL Server, попробуйте установить 64-битный движок базы данных Microsoft Access.

См. http://www.microsoft.com/en-us/download/details.aspx?id=13255

Например, чтобы импортировать данные из c: \ data.xlsx, который имеет лист MyData, вы можете использовать:

SELECT *
  FROM OPENROWSET ( 'Microsoft.ACE.OLEDB.12.0'
                  , 'Excel 12.0;database=c:\data.xlsx;IMEX=1'
                  , 'SELECT * FROM [MyData$]')
0 голосов
/ 15 мая 2012

Я обычно делаю это тремя способами.

  1. Используйте VBA внутри рабочего листа. Это включает в себя некоторую работу по разработке, которая требует слишком много усилий, если вы делаете это только один раз. Это хорошо, если вы хотите использовать этот лист несколько раз.
  2. Используйте комбинацию макросов внутри листа для объединения вставлять запросы, которые я затем вставляю в SQL Management Studio, или какой-нибудь похожий клиент SQL, и запустите вставки.
  3. Используйте инструмент командной строки для массового копирования, чтобы скопировать файл CSV, который я будет конвертировать из листа, как это: bcp [dbname].[dbo].[myTableName] in data1.csv -T -SmyServerName -c -t^| > log1.txt
0 голосов
/ 15 мая 2012

сначала сохраняет электронную таблицу в формате .xls (версия 97-2003) и импортирует их в SQL во временный файл.После импорта этих данных убедитесь, что длины полей временной таблицы аналогичны исходным.

, а затем используйте следующую инструкцию для обновления исходной таблицы

insert into orginal (field1, field2)
select field1, field2 from temp
0 голосов
/ 11 января 2012

вы ничего не упомянули о существующей таблице и ключах в таблице и в файле Excel, поэтому просто для того, чтобы дать вам толчок, следующая команда выбирает все данные из файла xltest.xls («customrs»)

    SELECT * FROM OPENROWSET('Microsoft.Jet.OLEDB.4.0',
    'Excel 8.0;Database=C:\test\xltest.xls', [Customers$])

С этого момента, ваша структура базы данных может импортировать / объединять существующие данные.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...