如何重构此查询以便不存在 COALESCE 或 ISNULL?我可以更改它以使用 CASE 吗?还有其他方法可以重构吗?
SELECT * FROM MockDb WHERE
COALESCE(Column1,0) = @value1 AND
COALESCE(Column2,0) = @value2 AND
COALESCE(Column3,0) = @value3 AND
COALESCE(Column4,0) = @value4 AND
COALESCE(Column5,0) = @value5
最佳答案
这似乎是奇怪的逻辑 - 将列中的 NULL
值视为“0”。
你可以写:
where (column1 = @value1 or @value1 = 0 and column1 is null) and
(column2 = @value2 or @value2 = 0 and column2 is null) and
. . .
通常,需要关注的是允许参数使用 NULL
值。我希望看到如下逻辑:
where (column1 = @value1 or @value1 is null) and
(column2 = @value2 or @value2 is null) and
. . .
此版本将参数中的 NULL
值视为“出于过滤目的忽略此列”。您的版本处理列本身中的 NULL
值。
关于sql - 将合并替换为 case,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38848810/