zoukankan      html  css  js  c++  java
  • sqlserver merge用法

    Merge关键字是一个神奇的DML关键字。它在SQL Server 2008被引入,它能将Insert,Update,Delete简单的并为一句。MSDN对于Merge的解释非常的短小精悍:”根据与源表联接的结果,对目标表执行插入、更新或删除操作。

    主要用法:
    merge无法多次更新同一行,也无法更新和删除同一行
    当源表和目标表不匹配时:
    若数据是源表有目标表没有,则进行插入操作
    若数据是源表没有而目标表有,则进行更新或者删除数据操作
    当源表和目标表匹配时:
    进行更新操作或者删除操作

    语法格式:

    MERGE 目标表

    USING 源表

    ON 匹配条件

    WHEN MATCHED THEN

    语句

    WHEN NOT MATCHED THEN

    语句;

    其中最后语句分号不可以省略,且源表既可以是一个表也可以是一个子查询语句

    WHEN NOT MATCHED BY TARGET

    表示目标表不匹配,BY TARGET是默认的,所以上面我们直接使用WHEN NOT MATCHED THEN

    WHEN NOT MATCHED BY SOURCE

    表示源表不匹配,即目标表中存在,源表中不存在的情况。

    注意事项:

    Merge 语句最后必须包含分号,以 ; 结束。

    使用场景:

    平时我们在项目中时常会碰到需要定期同步的问题,比如组织架构、人员信息、物品信息等等。

    实战举例:

    此时我有一个用户表kb_People,有一个用户表2  kb_People2。你可以把它想象成不同库的用户表。

    需求:kb_People表需要每天定时去更新数据,如:新增、修改、删除用户操作。依据来源就是kb_People2,如图

    实现:

    merge [KBDB].[dbo].[kb_People] as a --目标表
    using [KBDB].[dbo].[kb_People2] as b --源表
    on a.ID=b.ID    --关联关系
    when MATCHED then    --如果ID相匹配
    update set a.name=b.name,a.username=b.username,a.password=b.password,a.peotypeid=b.peotypeid   --修改
    WHEN NOT MATCHED THEN    --如果ID匹配不上
    insert (id,name,username,password,peotypeid) values (b.id,b.name,b.username,b.password,b.peotypeid);  --新增

    结果展示:

    最后拿语句再去跑个作用定期执行就搞定了。

    参考网址:

    https://www.jb51.net/article/75302.htm

    https://www.cnblogs.com/zfy-220/p/4977802.html

  • 相关阅读:
    C#中 @ 的用法
    ASP.NET页面间传值
    ASP.NET中常用的文件上传下载方法
    把图片转换为字符
    把图片转换为字符
    JavaScript 时间延迟
    Using WSDLs in UCM 11g like you did in 10g
    The Definitive Guide to Stellent Content Server Development
    解决RedHat AS5 RPM安装包依赖问题
    在64位Windows 7上安装Oracle UCM 10gR3
  • 原文地址:https://www.cnblogs.com/JoeYD/p/15165333.html
Copyright © 2011-2022 走看看