Vac*_*ano 3 t-sql sql-server null sql-server-2008
我需要连接两个或多或少相同的表(一个是另一个临时表数据).
某些列可以为空,当值为null时,我的merge语句中的连接不匹配.(这是空值的正常行为.)
问题是,当它们不匹配时会导致删除并重新创建行,更改实际表中行的值标识.
我知道我可以做这样的事情来加入空值:
on coalesce(target.SomeId, -9999) = coalesce(source.SomeId, -9999)
Run Code Online (Sandbox Code Playgroud)
但我不喜欢不得不挑选一个我希望永远不会被使用的号码.(感觉很脏.)
是否有更好的方法在可空列上进行连接而不是使用像这样的幻数?
我们来看看:
target.SomeId = source.SomeId
or (target.SomeId is null and source.SomeId is null)
Run Code Online (Sandbox Code Playgroud)
从概念上讲,这应该是有道理的.也就是说,两个值都为空或两个值彼此相等.由于合并强制进行表扫描,因此这也应该表现得更好.我已经将合并风格转换为上述风格并且看到了巨大的性能提升.
| 归档时间: |
|
| 查看次数: |
529 次 |
| 最近记录: |