解析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句法时,假如存在多处匹配,它会抛出一个错误。这就需要开发者主意,要达到预想的目标,当前的联合条件还不够十分明确。
![](/images/zang.png)
![](/images/jiucuo.png)
猜你喜欢
Python实现绘制3D地球旋转效果
![](https://img.aspxhome.com/file/2023/1/101261_0s.png)
MySQL高效分页解决方案集分享
飞扬远程获取类Asp xmlHttp 源码
Go 语言中gin使用gzip压缩遇到的问题
CentOS 7.4下安装Oracle 11.2.0.4数据库的方法
![](https://img.aspxhome.com/file/2023/0/69370_0s.jpg)
架构师说比起404我们更怕200错误
![](https://img.aspxhome.com/file/2023/2/132252_0s.png)
统计出现最多的字符次数的js代码
python3.5 + PyQt5 +Eric6 实现的一个计算器代码
![](https://img.aspxhome.com/file/2023/7/124207_0s.png)
Vue组件的通信方式详解
![](https://img.aspxhome.com/file/2023/1/133161_0s.jpg)
用python爬取租房网站信息的代码
十“问”DreamWeaver
提醒各位一下,IE透明会失效的
![](https://img.aspxhome.com/file/UploadPic/20093/31/icon_lol-37s.gif)
python enumerate函数的使用方法总结
加快Firefox 3.5启动速度的方法
用CSS定义 li 样式
t-sql/mssql用命令行导入数据脚本的SQL语句示例
js控制文本框禁止输入特殊字符详解
Python之二维正态分布采样置信椭圆绘制
![](https://img.aspxhome.com/file/2023/4/83824_0s.jpg)
使用已经得到的keras模型识别自己手写的数字方式
![](https://img.aspxhome.com/file/2023/2/78522_0s.jpg)