zoukankan      html  css  js  c++  java
  • 合并数据

    SQL Server 2008 引入了一个称为MERGE 的语句,它能在一条语句中根据逻辑条件对数据进行不同的修改操作(INSERT、UPDATE和DELETE)。MERGE语句是SQL 标准的一部分,而T-SQL版本的MERGE语句也增加了一些非标准的扩展。

    因为MERGE语句是新增的,所以必须使用SQL Server 2008。

    使用MERGE语句的好处是:用较少的代码就可以表达需求,提高查询性能,因为它可以更少地访问查询涉及表。

    MERGE INTO dbo.Customers AS TGT

    USING dbo.CustomersStage AS SRC

      ON TGT.custid=SRC.custid

    WHEN MATCHED THEN

      UPDATE SET

        TGT.companyname=SRC.companyname,

        TGT.phone=SRC.address,

        TGT.address=SRC.address

    WHEN NOT MATCHED THEN

      INSERT (custid,companyname,phone,address)

      VALuES( SRC.custid,SRC.companyname,SRC.phone,SRC.address);

    注意:MERGE 语句必须以分号结束,而对于T-SQL中的大多数其他语句来说,以分号结束语句是可选的。但是,如果遵循最佳实践,用分号结束所有语句,这也并不会带来什么麻烦。

    当存在匹配时,该MERGE 语句定义了一个UPDATE 操作,将目标表的companyname、phone及address设置为来源表中相应行的同名列值。注意,此处UPDATE操作的语法和普通的UPDATE语句很类似,只是不须要再提供更新操作的目标表,因为在MERGE子句中已经定义好了目标表。

    当不存在匹配时,该MERGE语句定义了一个INSERT操作,将来源表中的数据行插入目标表。同样,此处INSERT操作的语法和普通的INSERT语句很类似,只是不须要再提供插入操作的目标表,因为在MERGE子句中已经定义好了目标表。

    T-SQL 还支持第3种子句WHEN NOT MATCHED BY SOURCE,它用于定义对于目标表的一个行,在来源表中没有与之匹配的行时应该采取的操作。

  • 相关阅读:
    每日学习
    解决MySQL下把结果导出到文件权限不足问题
    杀死Windows中的进程镜像taskkill /F /IM 镜像名
    大家,中秋节快乐
    学习AutoIt
    为什么你应该(从现在开始就)对自己投资
    验证PE文件数字签名是否有效
    MySQL Cluster集群搭建与测试
    MySQL主从复制与读写分离
    Python与Zabbix API交互配置监控主机
  • 原文地址:https://www.cnblogs.com/zhangdx/p/3758118.html
Copyright © 2011-2022 走看看