当前位置: 首页 > 图文教程 > 数据库 > MSSQL > 解析SQL Server 2008中的新语句:MERGE

MSSQL
MS SQL SERVER2005 XML 最佳实践
SQL Server对文件进行全文检索的查询
教你构建SQL Server可管理安全机制
维护SQL Server的交易日志经验总结
SQL SERVER 2005 EXPRESS不能远程连接的问题
SQL Server与Oracle并行访问本质区别
SQL Server数据库优化其索引的小技巧
分析及解决SQLServer死锁问题
用SQL Server为Web浏览器提供图像
SQL Server SQL Agent服务使用小结
SQL Server 存储过程的分页方案比拼
SQL Server数据库中存储引擎深入探讨
四招解决SQL Server对上亿表的排序和join的问题
SQL Server数据库管理员必须掌握的DBCC命令
如何将sql数据库的文件备份到本地?
如何解决Sybase数据库乱码问题详解
SQL Server:SQLServer中最小函数依赖集
小编谈Transact-SQL中的一些命名规范
谈SQL编写规范
浅谈SQL命名与注释规范

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


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-10-17   浏览: 40 ::
收藏到网摘: n/a

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句法时,假如存在多处匹配,它会抛出一个错误。这就需要开发者主意,要达到预想的目标,当前的联合条件还不够十分明确。