1

这是我的笔记本电脑规格:

操作系统:Windows 7 - 64 位,数据库: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$]')

我尝试修复:

安装 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

,但我仍然得到错误。有人可以帮助我吗?

4

1 回答 1

1

OPENROWSET 函数的 SQL 查询:--

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 文件的第一行由 Column Header 名称组成

六。Sheet1 是您要导入的工作表的名称

七。Excel 8.0 指定为 97 – 2003 格式的 excel 文件

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) 要在预定义 SQL 表中复制 excel 文件,请使用带有插入命令的 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 的文件,请使用

SELECT * INTO [dbo].[Addresses] FROM OPENROWSET('Microsoft.ACE.OLEDB.12.0','Excel 12.0;Database=D:\SQL Scripts\msp.xlsx;HDR=YES;IMEX=1','SELECT * 来自 [Sheet1$]')

一世。它将在当前选定的数据库中创建名称为 Addresses 的表

ii. Microsoft.ACE.OLEDB.12.0 是用于转换的驱动程序

iii. 带路径的 Excel 文件 - D:\SQL Scripts\msp.xlsx

iv. 包括 IMEX=1 属性,包含混合数据类型的列被视为字符串/文本数据类型。

v. HRD =Yes 属性表示 excel 文件的第一行由 Column Header 名称组成

六。Sheet1 是您要导入的工作表的名称

七。Excel 12.0指定为2007-2010格式的excel文件

7) 要在预定义 SQL 表中复制 excel 文件,请使用带有插入命令的 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$]')
于 2012-03-28T08:57:08.487 回答