关于sql server的对于excel文件内容来相应更新语句
使用场景:经常会有客户将一些 数据信息 通过excel表格 来表达。那么程序员需要将这些信息放入项目对应建立的表中。
1:如果就是全新的数据 其实就是插入
2:如果是在原有的excel文档上 客户又新增了一些数据或者又更改了一些信息 那么就需要新增新的数据,以及更新老的数据
接下来就介绍如何操作:
第一步:先将excel文件 导入数据库 形成一个表 通过sql server提供的任务很简单
右键你的数据库-任务-导入数据
这个很简单 按图一步步来就行了,那么对应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的列名字
那么接下来需要的操作就是将#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