关于sql server的对于excel文件内容来相应更新语句

使用场景:经常会有客户将一些 数据信息 通过excel表格 来表达。那么程序员需要将这些信息放入项目对应建立的表中。

1:如果就是全新的数据 其实就是插入

2:如果是在原有的excel文档上 客户又新增了一些数据或者又更改了一些信息  那么就需要新增新的数据,以及更新老的数据

接下来就介绍如何操作:

第一步:先将excel文件 导入数据库 形成一个表   通过sql server提供的任务很简单

右键你的数据库-任务-导入数据

关于sql server的对于excel文件内容来相应更新语句关于sql server的对于excel文件内容来相应更新语句关于sql server的对于excel文件内容来相应更新语句关于sql server的对于excel文件内容来相应更新语句

关于sql server的对于excel文件内容来相应更新语句

这个很简单 按图一步步来就行了,那么对应excel的表就建好了。

第二步:就是操作excel表与要新增或者修改的表

1:有后续新增    找到与之前相比(已经新增过操作将之前的数据放入数据库了)后续新增的数据

关联一下 左连接 excel表  如果数据库中的表id为空 就说明是新增的数据   放到#temp临时表中代表所需新增数据

select distinct a.*  into #temp 
 from Test.[dbo].[temp] a left join  [dbo].[EnterpriseBaseInfo] b 
  on 条件  
where b.ID is  null 

虽然excel表建好了 但是列名其实都是excel的列名字

关于sql server的对于excel文件内容来相应更新语句

那么接下来需要的操作就是将#temp 的新增数据 需要将列名的名字进行中文-英文的转换(一般数据库都是英文,excel都是中文)

列如:

select NEWID() ID, c.* into #tempinsert  from (
 select  distinct  top 10  原组织机构代码  EnterpriseCode, 单位详细名称 EnterpriseName 
 (case when [贵单位是否为批发、零售、住宿或餐饮业法人单位或产业活动单位]='1' then 1 when [贵单位是否为批发、零售、住宿或餐饮业法人单位或产业活动单位]='2'then 0 else null end)  IsBusiness
from #temp a) c

这样转换过后就可以插入 sql的表了

 insert into  [dbo].[EnterpriseBaseInfo] select * from #tempinsert

如果列名不全部插入那就insert into  [dbo].[EnterpriseBaseInfo](a,b,c) select a,b,c from #tempinsert  因为列名都匹配上了

 

2:更新

一般都是将另一个表的字段内容更新到这个表的字段  根据一个条件匹配

update  table_a  set   1=table_b.2 from table_b  where  table_a.id=table_b.id

table_b 可以是一个表也可以是几个表的结合数据

  update [dbo].[EnterpriseBaseInfo] set Switchboard=convert(nvarchar(30),convert(decimal(11,0),t.固定电话))+ iif(t.电话分机号 is null,'','-'+convert(nvarchar(30),convert(decimal(11,0),t.电话分机号)))
 from 
(
 table
 ) t where [EnterpriseBaseInfo].ID=t.ID