Невозможно импортировать данные из Excel 2003 в базу данных с помощью функции openrowset - PullRequest
0 голосов
/ 28 марта 2012

Это спецификация моего ноутбука:

ОС: Windows 7 - 64bit, База данных: SQL SERVER 2008 R2, Microsoft Office: Microsoft Office 2007,

Моя проблема: Когда я запускаю свойпроцедура для импорта данных из Excel 2003 (XLS) в базу данных (SQL Server 2008), я получил эту ошибку:

<span style="color:red">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.</span>

это моя процедура:

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

I 'мы пытаемся исправить с помощью:

Установить AccessDatabaseEngine.exe

Запустите ниже на SQL:

EXEC sp_configure 'Ad Hoc Distributed Queries', 1;
GO
EXEC sp_configure 'show advanced options', 1;
GO
EXEC sp_MSset_oledb_prop N'Microsoft.Jet.OLEDB.4.0', N'AllowInProcess', 1
GO
EXEC sp_MSset_oledb_prop N'Microsoft.Jet.OLEDB.4.0', N'DynamicParameters', 1

, но я все еще получаю ошибку.Кто-нибудь может мне помочь?

Ответы [ 2 ]

1 голос
/ 28 марта 2012

SQL-запрос для функции OPENROWSET: -

1) Откройте SQL Server Management Studio

2) Откройте панель запросов и напишите следующие команды

3) Для файлов Excel 97 - 2003, в которых используются файлы с расширением XLS

SELECT * INTO [dbo].[Addresses]
FROM OPENROWSET('Microsoft.Jet.OLEDB.4.0', 'Excel 8.0;Database=D:\SQL Scripts\msp.xls;IMEX=1;HRD=Yes','SELECT * FROM [Sheet1$]')

я. Он создаст таблицу с именем Addresses в текущей выбранной базе данных.

II. Microsoft.Jet.OLEDB.4.0 - это драйвер, используемый для конвертации

III. Файл Excel с путем - D: \ SQL Scripts \ msp.xls

IV. Свойство IMEX = 1 включено, столбцы, которые содержат смешанные типы данных, обрабатываются как строковые / текстовые типы данных.

v. Свойство HRD = Yes означает, что верхняя строка файла Excel состоит из имени заголовка столбца

VI. Sheet1 - это имя листа, который вы хотите импортировать

VII. Excel 8.0 указывает, что это файл Excel формата 97 - 2003

4) Чтобы использовать запрос фильтра, пользователь может использовать предложение where и с этой командой, например

SELECT * INTO [dbo].[Addresses]
FROM OPENROWSET('Microsoft.Jet.OLEDB.4.0', 'Excel 8.0;Database=D:\SQL Scripts\msp.xls;IMEX=1;HRD=Yes','SELECT * FROM [Sheet1$]') where [column_name]=’value’

5) Чтобы скопировать файл Excel в предопределенную таблицу SQL, используйте функцию OPENROWSET с командой вставки, например: -

Create table Custom (Source_IP_ADD varchar(20),API_NAME varchar(50),COUNT_NO varchar(5),CLIENT_ID varchar(50),Date_OF_INVOKE varchar(50))

INSERT INTO [dbo].[Custom] ( [Source_IP_ADD], [API_NAME], [COUNT_NO], [CLIENT_ID], [Date_OF_INVOKE])

    SELECT [Source_IP_ADDR], [API_NAME], [COUNT_NO], [CLIENT_ID], [Date_INVOK] FROM OPENROWSET('Microsoft.Jet.OLEDB.4.0','Excel 8.0;Database=D:\SQL Scripts\msp.xls;IMEX=1;HRD=Yes','SELECT * FROM [Sheet1$]')

6) Для Excel 2007 - 2010 файл, который имеет расширение XLSX, использует

ВЫБРАТЬ * INTO [dbo]. [Адреса] FROM OPENROWSET ('Microsoft.ACE.OLEDB.12.0', 'Excel 12.0; База данных = D: \ SQL Scripts \ msp.xlsx; HDR = YES; IMEX = 1', 'SELECT * FROM [Sheet1 $]')

я. Это создаст таблицу с именем Адреса в текущей выбранной базе данных

* 1 035 * II. Microsoft.ACE.OLEDB.12.0 - это драйвер, используемый для конвертации

III. Файл Excel с путем - D: \ SQL Scripts \ msp.xlsx

IV. Свойство IMEX = 1 включено, столбцы, которые содержат смешанные типы данных, обрабатываются как строковые / текстовые типы данных.

v. Свойство HRD = Yes означает, что верхняя строка файла Excel состоит из имени заголовка столбца

VI. Sheet1 - это имя листа, который вы хотите импортировать

VII. Excel 12.0 указывает, что это файл Excel формата 2007 - 2010

7) Чтобы скопировать файл Excel в предопределенную таблицу SQL, используйте функцию OPENROWSET с командой вставки, например: -

Create table Custom (Source_IP_ADD varchar(20),API_NAME varchar(50),COUNT_NO varchar(5),CLIENT_ID varchar(50),Date_OF_INVOKE varchar(50))

INSERT INTO [dbo].[Custom] ( [Source_IP_ADD], [API_NAME], [COUNT_NO], [CLIENT_ID], [Date_OF_INVOKE])
SELECT [Source_IP_ADDR], [API_NAME], [COUNT_NO], [CLIENT_ID], [Date_INVOK] FROM OPENROWSET('Microsoft.ACE.OLEDB.12.0' ,'Excel 12.0;Database=D:\SQL Scripts\msp.xlsx;HDR=YES;IMEX=1' ,'SELECT * FROM [Sheet1$]')
0 голосов
/ 28 марта 2012

Используйте эту ссылку .... Вы получите лучшую идею ...

...