解析SQL Server 2008中的新语句:MERGE

时间:2009-01-13 13:57:00 

Microsoft SQL Server 2008将包含用于合并两个行集(rowset)数据的新句法。根据一个源数据表对另一个数据表进行确定性的插入、更新和删除这样复杂的操作,运用新的MERGE语句,开发者只需使用一条命令就可以完成。

在对两个表进行信息同步时,有三步操作必须要进行。首先我们要处理任何需要插入目标数据表的新行。其次是处理需要更新的已存在的行。最后要删除不再使用的旧行。这个过程中需要维护大量重复的逻辑,并可能导致微妙的错误。

值得我们大家主意的是,Bob Beauchemin讨论了MERGE语句,这个语句将上述的多个操作步骤合并成单一语句。以下是他给出的示例:

以下是引用的片断:

merge [target] t
using [source] s on t.id = s.id
when matched then update t.name = s.name, t.age = s.age -- use "rowset1"
when not matched then insert values(id,name,age) -- use "rowset2"
when source not matched then delete; -- use "rowset3"

大家可以看到,具体的操作是根据后面的联合(join)的解析结果来确定的。在这个示例中,假如目标和源数据表有匹配的行,就实行更新操作。如果没有,就实行插入或者删除操作来使目标数据表和源数据表保持一致。

这个新句法的一个精妙之处是它在处理更新时的确定性。在使用标准的UPDATE句法和联合时,可能有超过一个源行跟目标行匹配。在此情况下,无法预料更新操作会采用哪个源行的数据。

而我们在使用MERGE句法时,假如存在多处匹配,它会抛出一个错误。这就需要开发者主意,要达到预想的目标,当前的联合条件还不够十分明确。

标签:
0
投稿

猜你喜欢

  • Python实现绘制3D地球旋转效果

    2021-04-17 22:25:37
  • MySQL高效分页解决方案集分享

    2024-01-26 09:29:36
  • 飞扬远程获取类Asp xmlHttp 源码

    2010-04-03 20:37:00
  • Go 语言中gin使用gzip压缩遇到的问题

    2024-02-01 16:52:40
  • CentOS 7.4下安装Oracle 11.2.0.4数据库的方法

    2024-01-24 20:36:20
  • 架构师说比起404我们更怕200错误

    2022-11-02 20:40:43
  • 统计出现最多的字符次数的js代码

    2023-10-09 18:58:07
  • python3.5 + PyQt5 +Eric6 实现的一个计算器代码

    2021-02-27 17:00:28
  • Vue组件的通信方式详解

    2024-04-26 17:39:23
  • 用python爬取租房网站信息的代码

    2022-04-30 07:03:38
  • 十“问”DreamWeaver

    2007-02-03 11:39:00
  • 提醒各位一下,IE透明会失效的

    2009-03-31 12:48:00
  • python enumerate函数的使用方法总结

    2022-07-06 05:37:10
  • 加快Firefox 3.5启动速度的方法

    2009-07-16 15:22:00
  • 用CSS定义 li 样式

    2007-09-28 20:56:00
  • t-sql/mssql用命令行导入数据脚本的SQL语句示例

    2024-01-21 16:15:42
  • js控制文本框禁止输入特殊字符详解

    2024-04-25 13:07:03
  • Python之二维正态分布采样置信椭圆绘制

    2021-04-08 06:39:09
  • 使用已经得到的keras模型识别自己手写的数字方式

    2021-04-03 17:41:11
  • python实战之实现excel读取、统计、写入的示例讲解

    2022-02-12 17:42:15
  • asp之家 网络编程 m.aspxhome.com