我如何重构这个查询,使其不存在COALESCE或ISNULL?我能把它改成大小写吗?有没有其他方法可以重构它?
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发布于 2016-08-09 18:59:27
这似乎是一种奇怪的逻辑--将列中的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值。
发布于 2016-08-09 19:00:32
你可以替换
coalesce(column1, 0)使用
case when column1 is null then 0 else column1 end但是,您可以设置另一个条件:
(column1=@value1) OR (column1 is null AND @value1=0)https://stackoverflow.com/questions/38848810
复制相似问题