我有存储过程采用多个参数(在某些情况下最多 7 或 8 个)用于过滤结果集。这些参数是可选的(默认NULL
)。传入的所有非 NULL 值都将在过滤器中使用(即它是 booleanand
而不是 boolean or
)。
这些查询通常最终看起来像这样......
SELECT *
FROM [MyTable]
WHERE (@Param1 IS NULL OR (@Param1 IS NOT NULL AND [Field1] = @Param1))
AND (@Param2 IS NULL OR (@Param2 IS NOT NULL AND [Field2] = @Param2))
AND (@Param3 ...
我知道这是非常低效的,但是由于参数的数量,它不可能将它们分成单独的查询。
因此,我尝试执行以下操作...
SELECT *
FROM [MyTable]
WHERE [Field1] = ISNULL(@Param1, [Field1])
AND [Field2] = ISNULL(@Param2, [Field2])
AND [Field3] ...
但是,当字段包含时会出现问题NULL
,因此=
运算符根本不起作用。
有没有一种简单而有效的方法来做到这一点,以便我可以使用多个“过滤器”参数进行单个查询?如果可能的话,我宁愿不使用动态 SQL。