一些常用的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
原文地址:https://www.cnblogs.com/yaosuc/p/4726195.html