需要帮助来使用SQLCMD在文本文件中执行SQL

我想加载一个Excel文件( .XLS )到我的数据库中的表。 数据库是在我自己的电脑上,我有SQL服务器08中的sa帐户。该Excel文件包含 –

 Id Name 1 Dog 2 Cat 3 Fish 

带有SQL代码的文件( demo.txt ):

 insert into [MyDb].[dbo].[relative] select * from openrowset('Microsoft.Jet.OLEDB.4.0','Excel 8.0; Database=C:\My Temp Files\Excel','select * from [sheet1$]'); 

SQLCMD代码:

 sqlcmd -S MyPc\SQL2008 -i "C:\My Temp Files\SQL\demo.txt" 

sqlcmd的错误:

消息7308,级别16,状态1,服务器MyPc \ SQL2008,第1行
OLE DB提供程序“Microsoft.Jet.OLEDB.4.0”不能用于分布式查询,因为提供程序configuration为以单线程单元模式运行。

修复(这并不能解决问题)的上述错误http://blog.sqlauthority.com/2010/11/03/sql-server-fix-error-ms-jet-oledb-4-0-cannot-可使用的换分布式查询,这是因为最提供商正在使用的对运行中的公寓模式/

 sp_configure 'show advanced options', 1; GO RECONFIGURE; GO sp_configure 'Ad Hoc Distributed Queries', 1; GO RECONFIGURE; GO 

我该如何解决这个问题并使其工作?


EDITS –


我试了上面的链接的评论中的东西,并得到了错误 –

 Msg 7399, Level 16, State 1, Server MyPc\SQL2008, Line 1 The OLE DB provider "Microsoft.ACE.OLEDB.12.0" for linked server "(null)" report ed an error. The provider did not give any information about the error. Msg 7303, Level 16, State 1, Server MyPc\SQL2008, Line 1 Cannot initialize the data source object of OLE DB provider "Microsoft.ACE.OLEDB .12.0" for linked server "(null)". 

我试过 –

从Microsoft下载并安装新的64位组件: http : //www.microsoft.com/downloads/en/details.aspx?FamilyID= c06b8369-60dd-4b64-a44b-84b371ede16d& displaylang=en

要安装上述组件,无需先卸载32位Office应用程序。 我们可以使用命令提示符安装64位Microsoft Access数据库引擎2010 Redistributable组件。

 C:\Downloads\AccessDatabaseEngine_x64.exe /passive 

打开SQL Server并运行以下命令:

 sp_configure 'show advanced options', 1; GO RECONFIGURE; GO sp_configure 'Ad Hoc Distributed Queries', 1; GO RECONFIGURE; GO 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 

这设置访问和运行与组件相关的查询所需的参数。 地址'null

现在,如果您正在运行OPENROWSET调用,则需要放弃使用旧的JET参数进行的调用,并使用新调用,如下所示:

(*示例,直接导入一个EXCEL文件到SQL中):

不要这样做…

 SELECT * FROM OPENROWSET('Microsoft.Jet.OLEDB.4.0','Excel 8.0;HDR=YES; Database=c:\PATH_TO_YOUR_EXEXCEL_FILE.xls', 'select * from [sheet1$]') 

使用这个INSTEAD …

 SELECT * FROM OPENROWSET('Microsoft.ACE.OLEDB.12.0', 'Excel 12.0; Database=c:\PATH_TO_YOUR_EXEXCEL_FILE.xls','select * from [sheet1$]') 

现在,我如何解决这个新方法给我的错误?