2012-03-05 74 views
0

如果我的源中有多个行与我的目标不匹配,并且插入一个会导致匹配(并且如果它存在,会导致不匹配),我是否安全所有将被合并的假设?也就是说,将要合并的来源中的记录被标识并且在它们中的任何一个被添加之前注定要合并?这似乎是如何工作的,下面没有任何东西与它相矛盾,但我不确定这是一个确定的保证。TSQL合并不匹配

Johnny Microsoft says:

WHEN NOT MATCHED [BY TARGET] THEN

Specifies that a row is inserted into target_table for every row returned by 

<table_source> ON <merge_search_condition>一点不 匹配在target_table一排,但确实满足附加搜索 条件,如果存在。要插入的值由 <merge_not_matched>子句指定。 MERGE语句只能有一个WHEN NOT MATCHED子句。

回答

0

合并扫描每一行,并且它只会传递一次数据。因此,在语句执行时满足WHEN MATCHED子句的所有记录都将受到影响,并且只有在语句执行时满足WHEN NOT MATCHED子句的记录才会受到影响。

+0

谢谢,接受答案,你有没有找到任何文件,或者你只知道? – 2012-03-30 12:08:58

+0

这既是我的经验,也是我多年来阅读的内容。在merge语句中有一个关于SQLAuthority的博客,它声明你可以在执行计划中看到“执行次数”和受影响的行数等等...... http://blog.sqlauthority.com/2010/06/ 08/SQL服务器合并的操作 - 插入 - 更新 - 删除 - 在单执行/ – elvis 2012-03-30 16:28:45