Импорт данных из Excel в SQL Server

Я хочу импортировать файл Excel в SQL Server, но сталкиваюсь с ошибкой.

Мой код:

create table test
(
    AccountNumber varchar(50),  
    AccountName varchar(50),
    ParentAccountNumber varchar(50)

)

select * 
into test 
FROM OPENROWSET('Microsoft.Jet.OLEDB.4.0', 
    'Excel 8.0;Database=D:\testing.xls;HDR=YES', 
    'SELECT * FROM [Sheet1$]')

Ошибка:

Сообщение 7302, уровень 16, состояние 1, строка 10
Не удается создать экземпляр поставщика OLE DB "Microsoft.Jet.OLEDB.4.0" для связанного сервера "(null)".

Примечание:

  • Версия Excel: 2007
  • Версия SQL Server: 2012 г.

person Arash    schedule 10.08.2014    source источник
comment
Как правило, это означает, что либо драйвер не установлен, либо установлена ​​только 32-разрядная версия, а у вас 64-разрядный SQL Server.   -  person Nick.McDermaid    schedule 10.08.2014


Ответы (3)


Если вы не умеете писать скрипты, вы можете сделать это с помощью самого мастера.

  1. Щелкните правой кнопкой мыши имя БД, в которое вы хотите импортировать файл Excel. выберите Задача->Импорт.
  2. Новый мастер откроется и выберет источник как Microsoft excel и место назначения как сервер Sql и выполнит аутентификацию.
  3. Остальное все само собой объяснимо.
  4. Вы можете предварительно просмотреть данные перед импортом и управлять столбцами, которые хотите импортировать.
  5. Наконец, нажмите «Готово», чтобы запустить пакет.
  6. Благодарим вас за успешный импорт.
person Vishwaram Sankaran    schedule 10.08.2014
comment
Я знаю этот способ, но предпочитаю писать для него сценарий. в любом случае, спасибо :) - person Arash; 10.08.2014

Попробуйте это после создания таблицы,

INSERT INTO test (AccountNumber , AccountName , ParentAccountNumber)
SELECT *
FROM OPENROWSET ('Microsoft.Jet.OLEDB.4.0',
      'Excel 8.0;Database=D:\testing.xls;HDR=YES',
      'SELECT * FROM [Sheet1$]');
person Chamithra Thenuwara    schedule 10.08.2014

Попробуйте запустить приведенный ниже код:

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

select * FROM OPENROWSET('Microsoft.ACE.OLEDB.12.0',   
'Excel 12.0;Database=D:\testing.xls;HDR=YES',   
'SELECT * FROM [Sheet1$]')   

Убедитесь, что ваш лист Excel закрыт, когда вы запускаете этот код.

person whywake    schedule 10.08.2014
comment
Вы уверены? Поставщиком в этой строке является ACE, так что на этот раз это не ваша ошибка в отношении ACE (не Microsoft.Jet) - person Nick.McDermaid; 10.08.2014
comment
ACE действительно работал в моем случае. Я думаю, что на компьютере пользователя может отсутствовать компонент OLEDB, который соединяет SSMS с Excel. - person whywake; 10.08.2014
comment
Я получил эту ошибку: Поставщик OLE DB Microsoft.ACE.OLEDB.12.0 для связанного сервера (нулевой) вернул сообщение Механизму базы данных Microsoft Access не удалось найти объект «Sheet1 $». Убедитесь, что объект существует и что вы правильно написали его имя и путь. Если «Лист1$» не является локальным объектом, проверьте подключение к сети или обратитесь к администратору сервера. Сообщение 7350, уровень 16, состояние 2, строка 2 Не удается получить информацию о столбце от поставщика OLE DB Microsoft.ACE.OLEDB.12.0 для связанный сервер (нулевой). - person Arash; 10.08.2014
comment
Вы можете попытаться сохранить файл на каком-нибудь общем диске, а затем получить к нему доступ оттуда? - person whywake; 10.08.2014
comment
также проверьте, имеют ли SQL Server и Excel одну и ту же версию. Один из них может быть 32-битным, а другой — 64-битным, и в этом случае драйверы вызывают проблемы совместимости. Посетите приведенный ниже URL-адрес для получения более подробной информации: ссылка - person whywake; 10.08.2014