用OPENROWSET一次性导入: sql2 ="Insert Into 目的表(字段1、字段2) select 字段a,字段b from openrowset('MICROSOFT.JET.OLEDB.4.0','Excel 8.0;DATABASE=c:\test.xls',sheet1$) a where 目的表.字段1<>a.字段a and 目的表.字段2<>a.字段b"
先从Excel一条条读取出数据,然后循环一条条插入SQL SERVER
表里原有数据要更新,原来没有的数据要插入没看清楚,如果是这样要用到两条语句,用个存储过程吧(以下假设id为主键): create proc test as Insert Into 目的表(字段1、字段2) select 字段a,字段b from openrowset('MICROSOFT.JET.OLEDB.4.0','Excel 8.0;DATABASE=c:\test.xls',sheet1$) a where 目的表.id<>a.idupdate 目的表 set 目的表.字段1=a.字段a,目的表.字段2=a.字段a from openrowset('MICROSOFT.JET.OLEDB.4.0','Excel 8.0;DATABASE=c:\test.xls',sheet1$) a set a.where 目的表.id<>a.idGO
哟,第二条改把<>改成=: update 目的表 set 目的表.字段1=a.字段a,目的表.字段2=a.字段a from openrowset('MICROSOFT.JET.OLEDB.4.0','Excel 8.0;DATABASE=c:\test.xls',sheet1$) a set a.where 目的表.id=a.id
另外还可以先删除后插入,如: create proc test as delete from 目的表 where id=(select id from openrowset('MICROSOFT.JET.OLEDB.4.0','Excel 8.0;DATABASE=c:\test.xls',sheet1$))Insert Into 目的表(字段1、字段2) select 字段a,字段b from openrowset('MICROSOFT.JET.OLEDB.4.0','Excel 8.0;DATABASE=c:\test.xls',sheet1$) a where 目的表.id<>a.id GO 不知道符不符LZ的要求呢?
where id= 是不是替换成 where id in ? 或者 wehre id not in ?例如: 这个会将Excel中有而表中没有的插入表中: Insert Into newtable(备注,件进价,商品名称,条码,折扣) select 备注,件进价,商品名称,条码,折扣 from openrowset( 'Microsoft.Jet.OLEDB.4.0', 'Excel 8.0;DATABASE=D:\My Documents\123.xls',Report1$) a where a.商品名称 not in(select 商品名称 from newtable)
如果是数据库中的那就好办了。。
自己写一个程序就行了
如果是EXCEL中的我也不会....
UP......
sql2 ="Insert Into 目的表(字段1、字段2) select 字段a,字段b from openrowset('MICROSOFT.JET.OLEDB.4.0','Excel 8.0;DATABASE=c:\test.xls',sheet1$) a where 目的表.字段1<>a.字段a and 目的表.字段2<>a.字段b"
create proc test
as
Insert Into 目的表(字段1、字段2) select 字段a,字段b from openrowset('MICROSOFT.JET.OLEDB.4.0','Excel 8.0;DATABASE=c:\test.xls',sheet1$) a where 目的表.id<>a.idupdate 目的表 set 目的表.字段1=a.字段a,目的表.字段2=a.字段a from openrowset('MICROSOFT.JET.OLEDB.4.0','Excel 8.0;DATABASE=c:\test.xls',sheet1$) a set a.where 目的表.id<>a.idGO
update 目的表 set 目的表.字段1=a.字段a,目的表.字段2=a.字段a from openrowset('MICROSOFT.JET.OLEDB.4.0','Excel 8.0;DATABASE=c:\test.xls',sheet1$) a set a.where 目的表.id=a.id
create proc test
as
delete from 目的表 where id=(select id from openrowset('MICROSOFT.JET.OLEDB.4.0','Excel 8.0;DATABASE=c:\test.xls',sheet1$))Insert Into 目的表(字段1、字段2) select 字段a,字段b from openrowset('MICROSOFT.JET.OLEDB.4.0','Excel 8.0;DATABASE=c:\test.xls',sheet1$) a where 目的表.id<>a.id
GO
不知道符不符LZ的要求呢?
Insert Into newtable(备注,件进价,商品名称,条码,折扣)
select 备注,件进价,商品名称,条码,折扣
from
openrowset( 'Microsoft.Jet.OLEDB.4.0', 'Excel 8.0;DATABASE=D:\My Documents\123.xls',Report1$) a
where a.商品名称 not in(select 商品名称 from newtable)