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

excel表中的数据:

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