这是我的笔记本电脑规格:
操作系统: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
,但我仍然得到错误。有人可以帮帮我吗?
答案 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 ....您将会有更好的想法......