解读SQLServer2008的新语句MERGE
SQL Server 2008将包含合并两个行集数据的新语法。根据从一个源数据表到另一个源数据表的确定性插入、更新和删除的复杂操作,开发人员可以通过使用新的MERGE语句用一个命令来完成。
在两个表之间同步信息时,有三个步骤。首先处理需要插入到目标数据表中的任何新行。第二个是处理需要更新的现有行。最后,删除不再使用的旧行。在这个过程中,需要维护大量重复的逻辑,这可能会导致细微的错误。
Bob Beauchemin讨论了MERGE语句,它将上述多个操作步骤合并成一个语句。他举了以下例子:
merge [target] t
使用[source] s on t.id = s.id
匹配时然后更新t.name = s.name,t.age = s.age -使用" rowset 1 "
不匹配时然后插入值(id,name,age) -使用" rowset 2 "
当source不匹配时然后删除;-使用“行集3”
如你所见,具体操作是根据下面join的分析结果来决定的。在本例中,如果目标数据表和源数据表具有匹配的行,将执行更新操作。如果没有,插入或删除以保持目标数据表与源数据表一致。
这种新语法的优点之一是它在处理更新时的确定性。使用标准更新语法和union时,可能有多个源行与目标行匹配。在这种情况下,不可能预测更新操作将使用哪个源数据行。
当使用MERGE语法时,如果有多个匹配项,它将抛出一个错误。这提醒开发者,目前的联合条件还不够明确,无法达到预期的目标。
位律师回复
0条评论