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

2016-02-19 19:37 9 1 收藏

想要天天向上,就要懂得享受学习。图老师为大家推荐解析SQL Server 2008中的新语句:MERGE,精彩的内容需要你们用心的阅读。还在等什么快点来看看吧!

【 tulaoshi.com - 编程语言 】

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

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

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

  以下是引用的片断:

merge [target] t

using [source] s on t.id = s.id

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/bianchengyuyan/)

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"

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/bianchengyuyan/)

when source not matched then delete; -- use "rowset3"

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

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

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

来源:http://www.tulaoshi.com/n/20160219/1621448.html

延伸阅读
SQL Server 2005 SP2为我们带来了vardecimal功能,这项功能使得原来定长的decimal数据在数据文件中以可变长的格式存储,据称这项功能可以为典型的数据仓库节省30%的空间,而SQL Server 2008在这一基础上又进一步增强了数据压缩功能。SQL Server 2008现在支持行压缩和页面压缩两种选项,数据压缩选项可以在以下对象上启用: 未创建聚...
问题 安全是任何公司的一个主要考量。数据库备份容易被偷并被恢复到另一个SQL Server实例上。当我们浏览SQL Server 2008的新特性时,我们对一个叫做透明数据加密的特性很感兴趣,我们可以用它来加密我们的数据库备份。你能为我们详细介绍下应该怎样使用这个新功能吗? 专家解答 透明数据加密是SQL Server 2008的一个新特性...
sql2008 hql语句翻译过来的分页语句 WITH query AS (select syusers0.id as id5, syusers0.createdatetime as createda25_, syusers0.modifydatetime as modifyda35_, syusers0.name as name5, syusers0.password as password5, ROW_NUMBER() OVER ( order by syusers0.name desc) as hibernaterow_nr from sypro.syuser syusers0_ where 1=1 ...
最近在看数据库方面的书籍和视频,我觉得数据库的导入和导出很有用,顺便做一下总结,以免将来有遗忘啊!其实导入和导出很相似,思路是一样的,还有导入导出文本,Acess,Excel等等模板也都挺相似的,所以我就总结导出Excel吧。下面请看步骤: 1、首先需要准备的是在你的电脑上创建一个Excel表格(我创建在了桌面上)如图所示(是空的): &n...
出现这些情况的原因,往往是因为数据库有些损坏,或索引不完整。 在ACCESS中,有个修复数据库的功能可以解决这个问题,在SQL企业管理器,没有这个功能,要用语句来完成,下面就介绍如何用SQL语句完成数据库的修复,需要注意的是,在进行下面的操作时,必须断开所有用户的连接:  代码如下: USE MASTER GO sp_dboption '你的数据库...

经验教程

35

收藏

65
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部