【发布时间】:2019-09-23 09:22:41
【问题描述】:
在运行我的脚本一段时间后,我意识到<> 运算符没有按应有的方式工作,或者至少在涉及NULL 值时没有工作。我的许多MERGE 命令没有落在UPDATE 块中,因为<> 没有检测到两个不同的值。
因此,为了进行一些比较,我添加了COALESCE。
例如而不是
Value1 <> Value2
我用过
COALESCE(Value1, '') <> COALESCE(Value2, '')
问题是将COALESCE 添加到所有其他的是否安全,或者这是否也取决于数据类型或是否有其他警告?
【问题讨论】:
-
在这种情况下,我会使用 ISNULL 而不是 COALESCE,因为只有值(字段和默认值)。但请记住,您将 NULL 默认为 '',这意味着 Value1 = NULL 和 Value2 = '' 它们被认为是相等的
-
是的,你是对的。在这种情况下,
IS NULL是一个更好的选择,但我也会确保这些值可以为空。 -
Coalesce和IsNull之间的差异是 here。Coalesce是标准 SQL,可以处理两个以上的参数。正如 Luc 所指出的,您正在引入一个 magic value 而不是进行精确比较,即Value1 != Value2 or ( Value1 is NULL and Value2 is not NULL ) or ( Value1 is not NULL and Value2 is NULL )。
标签: tsql coalesce null-coalescing-operator