利用sql将excel中数据批量更新到SqlServer数据库中解决方法

利用sql将excel中数据批量更新到SqlServer数据库中
本帖最后由 gaohongijj 于 2014-12-18 16:03:12 编辑
数据库中表person的数据:
 
   利用sql将excel中数据批量更新到SqlServer数据库中解决方法

excel表中的数据:
   
利用sql将excel中数据批量更新到SqlServer数据库中解决方法

执行的sql:
update person set id=2 where name='hong'
update person set name=b.name  from 
person  a, 
OpenDataSource( 'Microsoft.Jet.OLEDB.4.0', 
'Data Source="D:\person.xls";
User ID=;Password=;
Extended properties=Excel 5.0')...sheet1$ b 
where a.id=b.id

  

在sqlserver中无法实现更新,sql可以实现吗?必须写类似于Java代码把excel读入内存,连接数据库逐条对比更新吗,想一个sql搞定,请高手帮忙
------解决思路----------------------
我的电脑是32位win7系统,sqlserver2005,excel 是12版的,我在自己环境里以前没具体操作过,也弄了很久这个命令终于更新成功了:
步骤回忆如下:

1.找到sqlsergver configuration manager
开启opensource和openrowset
利用sql将excel中数据批量更新到SqlServer数据库中解决方法
2.修改ace参数
[code=sql]
USE [master]    
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   

或者
SQL Management Studio:SQL服务器-->服务器对象-->链接服务器-->Microsoft.ACE.OLEDB.12.0 属性-->常规-->选中:1、动态参数;2、允许进程内 


3.注意如果出现以下错误:(2 中右击 ace 访问接口,里面就全不选)
链接服务器"(null)"的 OLE DB 访问接口 "Microsoft.Jet.OLEDB.4.0" 返回了消息 "未指定的错误"。

消息 7303,级别 16,状态 1,第 1 行

无法初始化链接服务器 "(null)" 的 OLE DB 访问接口 "Microsoft.Jet.OLEDB.4.0" 的数据源对象。

--最后代码如下
t1 是数据库中的表名
字段有 id sname
         
excel中的文件名和表名都为test

update t1 set name=a.sname
from (select * from    OPENDATASOURCE(  
         'Microsoft.Ace.OleDb.12.0',  
         'Extended Properties="Excel 12.0;HDR=YES;IMEX=1";Data Source="E:\test.xls"'  
         )...[test$]  ) a where t1.id=a.id

[/code]