无法使用openrowset函数将数据从excel 2003导入数据库

时间:2012-03-28 08:46:28

标签: sql-server-2008 64-bit excel-2007 oledb import-from-excel

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

操作系统: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

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

2 个答案:

答案 0 :(得分: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属性,包含混合数据类型的列被视为字符串/文本数据类型。

诉HRD = Yes属性表示excel文件的第一行包含列标题名称

VI。 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]。[地址] 来自OPENROWSET('Microsoft.ACE.OLEDB.12.0','Excel 12.0;数据库= D:\ SQL Scripts \ msp.xlsx; HDR = YES; IMEX = 1','SELECT * FROM [Sheet1 $]')

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

II。 Microsoft.ACE.OLEDB.12.0是转换的驱动程序

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

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

诉HRD = Yes属性表示excel文件的第一行包含列标题名称

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

七。 Excel 12.0指定它是2007 - 2010格式的Excel文件

7)要在预定义SQL表中复制excel文件,请使用OPENROWSET函数和insert命令,如: -

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$]')

答案 1 :(得分:0)

使用此 link ....您将会有更好的想法......