脚踏实地,一步一个脚印
排名
6
文章
6
粉丝
16
评论
8
{{item.articleTitle}}
{{item.blogName}} : {{item.content}}
ICP备案 :渝ICP备18016597号-1
网站信息:2018-2023TNBLOG.NET
技术交流:群号677373950
联系我们:contact@tnblog.net
欢迎加群交流技术

sqlserver MERGE INTO 用法

959人阅读 2022/12/10 12:49 总访问:383232 评论:0 收藏:0 手机
分类: SQL

前言


 

if not exists 判断 后面括号中的语句是否可以查询到数据, 如果能查询到则执行else后面的 update语句

如果 查询不到 则会执行 insert 语句 ,注意, 前面括号中的查询语句条件 和 后面的 update语句的条件要一致, update语句 中 set的数据要和where 后面的条件一致, 否则 执行两次会插入一条重复数据.

这个语法对于SQL只能更改一条语句,并且Oracle不能使用
所以就有了Merge intoOracle 9i引入的功能)语法 

If not exists 用法

if not exists (select id,abc,def from A_TEST where id = ‘A’ and abc = ‘B’)
INSERT INTO A_TEST (id,abc,def,ddd) VALUES(‘A’,’B’,’C’,’D’)
else update A_TEST set id = ‘A’,abc=’B’ ,def=’def’,ddd=’ddd’ where id = ‘A’ and abc = ‘B’

MERGE INTO 用法

merge into 目标表 a
 
using 源表 b
 
on(a.条件字段1=b.条件字段1 and a.条件字段2=b.条件字段2 ……)  
 
when matched then update set a.字段=b.字段 --目标表别称a和源表别称b都不要省略
 
when  not matched then insert (a.字段1,a.字段2……)values(b.字段1,b.字段2……) --目标表别称a可省略,源表别称b不可省略


下边放一块实战代码

	  MERGE INTO T_JCZX_DTXX_SYDT a
	USING ( select * from  T_JCZX_ZSJ_XMK)  b
	ON (a.XMMC = b.XMMC) 
	WHEN matched  THEN update set a.[XMMC]=b.XMMC ,a.[XMLX] =b.[XMLX],a.[XMZT]=b.[XMZT],a.[YWLY] =b.[YWLY],a.[XMTRJE]=b.[XMTRJE],a.[XMSSOY]=b.XMSSQY_Sheng,a.[XMJLID] =b.XMJL,a.XMJLMC = b.XMJLName,a.GSNY = b.LXRJ
	WHEN NOT matched  THEN  
    insert ([ID]
      ,[BaseIsDeleted]
      ,[BaseCreatorID]
      ,[BaseModifierID]
      ,[BaseCreator]
      ,[BaseModifier]
      ,[BaseCreateTime]
      ,[BaseModifyTime]
      ,[XMMC]
      ,[XMLX]
      ,[XMZT]
      ,[YWLY]
      ,[XMTRJE]
      ,[XMSSOY]
      ,[XMJLID]
      ,[XMJLMC]
      ,[XMJD]
      ,[XMWD]
      ,[GSNY] ) values( newID() ,[BaseIsDeleted]
      ,[BaseCreatorID]
      ,[BaseModifierID]
      ,[BaseCreator]
      ,[BaseModifier]
      ,[BaseCreateTime]
      ,[BaseModifyTime]
      ,b.[XMMC]
      ,b.[XMLX]
      ,b.[XMZT]
      ,b.[YWLY]
      ,b.[XMTRJE]
      ,b.XMSSQY_Sheng 
      ,b.XMJL  
      ,b.XMJLName  
      ,0
      ,0
      ,b.LXRJ );


评价