【发布时间】:2019-02-06 12:17:17
【问题描述】:
因此,我们在 DWH 环境中使用 SQL Server,并比较源和目标之间的值以相应地更新值。在某些 Merge 语句中,我们将 match 条件与 intersect 语句一起应用,但在某些情况下,我们直接使用 update 并使用 OR 条件进行检查。
但是,由于有时我们可以有需要比较的可空字段,这会导致一些问题。
我们尝试了以下 3 个选项:
- dest.col1 src.col1 - 这是不可能的,因为 Nullables 不会相互匹配
- isnull(dest.col1,0) isnull(src.col1,0) - 也不是一个选项,因为字段可以包含空值和零。万一出现问题并且需要重新加载,值可以是空值和数字
- ((dest.col1 src.col1) OR (dest.col1 is null and src.col1 is not null) OR (dest.col1 is not null and src.col1 is null)) - 也不是一个选项因为我们有数百万条记录,这将需要更新更多行。
我们可以对带有 match 和 intersect 的 Merge 语句使用类似的方法,但我们注意到这对于数百万条记录并不是最优的。
还有其他可行的选择吗?
【问题讨论】:
-
第三个选项如何更新不必要的行数?示例数据和预期输出将在这里有所帮助。
-
@RyanBalzan 。 . .第三个选项是正是您声称想要的逻辑。它不应更新不必要的行数。
标签: sql sql-server sql-update sql-merge