解析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
投稿

猜你喜欢

  • 一些SQL查询语法参考

    2007-10-14 11:56:00
  • XPath 11个实例

    2008-09-05 15:06:00
  • innerHTML 引发“未知的运行时错误”

    2008-04-09 13:06:00
  • JavaScript的9个陷阱及评点

    2007-08-28 15:10:00
  • ASP codepage 页面编码使用说明

    2011-03-03 11:24:00
  • 两个非常规ASP木马(可躲过扫描)

    2011-03-11 10:38:00
  • Oracle SecureFile的功能第1/4页

    2009-06-19 18:07:00
  • 白鸦:如何设计用户体验?

    2008-01-03 16:53:00
  • asp如何统计字符串出现的次数?

    2009-11-25 20:36:00
  • 多表关联同时更新多条不同的记录方法分享

    2011-11-03 17:34:25
  • MySql数据库基本命令集会

    2011-08-05 18:43:23
  • SQL Server数据库连接查询的种类及其应用

    2009-01-06 11:28:00
  • 利用sys.sysprocesses检查SqlServer的阻塞和死锁

    2011-11-03 17:24:11
  • Mysql使用Describe命令判断字段是否存在

    2011-04-25 18:27:00
  • 关于多域名COOKIES作用域的问题

    2008-11-18 16:12:00
  • 如何把图片上传到数据库中并显示出来?

    2009-11-06 13:50:00
  • 定义列表: DL DT DD

    2009-05-06 13:08:00
  • asp如何将产生的密码记录并发送给用户?

    2009-11-26 20:50:00
  • 试试把xml和javascript写到同一个文件里面

    2009-10-02 16:53:00
  • 发一新浪招聘的图片滚动控制JS效果

    2011-08-10 19:17:25
  • asp之家 网络编程 m.aspxhome.com