一些常用的Sql语句
1、根据一个表批量更新另一个表:
表A 字段colA1 colA2 colA3
表B 字段colB1 colB2
colB3
要求: 把表B中colB1和表A中colA1相等的记录进行更新,使得colB2=colA2,colB3=colA3。
Sql语句:
update B set B.colB2=A.colA2, B.colB3=A.colA3 from B inner join A on B.colB1=A.colA1
2、搜索并截取固定字符长度:
select substring('abcdefg',0,3) select substring(col,startindex,length) from table
3、合并/同步数据(目标表中存在则更新,目标表中不存在则插入):
merge 语句是一个多种功能的混合语句,在一个查询中可以完成insert、update、delete等功能。
根据与源表联接的结果,对目标表执行插入、更新或删除操作。源表中包含即将被添加(或更新)到目标表中的数据行,而目标表接受插入(或更新)操作,可以对两个表进行同步操作。
SQLServer2008之前的版本中是没有的,所以以前都是先删掉再添加,或写一些分支条件判断存在否再insert 或update。
--创建源表 create table sourceTable( id int, content varchar(30) ) --创建目标表 create table targetTable( id int, content varchar(30) ) --插入测试数据 insert into sourceTable values (1,'S001'),(2,'S002'),(3,'S003'),(4,'S004'),(5,'S005') insert into targetTable values (1,'target001'),(2,'target002'),(6,'target006'),(7,'target007') select * from sourceTable --源表 --id content
--1 S001 --2 S002 --3 S003 --4 S004 --5 S005 select * from targetTable --目标表 --id content
--1 target001 --2 target002 --6 target006 --7 target007 --编写merge语句 merge into targetTable t --目标表 using sourceTable s --源表 on t.id = s.id --类似join 完成两表之间的匹配 when matched --如果两表中有值被匹配,更新 then update set t.content = s.content when not matched --如果没有匹配结果,插入 then insert values(s.id,s.content) when not matched by source --目标表中存在但源表中不存在,删除 then delete; --再次查询,则两表同步,select * from sourceTable/targetTable
--id content
--1 S001
--2 S002
--3 S003
--4 S004
--5 S005