我有 2 个搜索参数。
-
我什么都不能传递,然后我必须从数据库获取所有行。 或者我可以通过 Param1 并在
ADB.param1=param1
的地方获得行 -
或者我可以通过 Param2 并在
ADB.param2=param2
的地方获得行 -
或者我可以传递 Param1 和 Param2 并在
ADB.param1=param1 and ADB.param2=param2
的地方获得行
让我们想象一下我有数据库喜欢
汽车颜色,汽车类型,汽车发动机体积,汽车品牌名称 param1 is CarColor 参数2 是 CarType 如果我选择数据库而不发送参数,我必须获取整个行列表
红色,轿车,2.0,本田
蓝色,轿车,3.0,宝马
绿色,皮卡,4.0,福特
如果我只发送参数2,例如"轿车" 我必须得到以下列表
红色,轿车,2.0,本田
蓝色,轿车,3.0,宝马
但是如果我发送两个参数,例如参数1"红色"和参数2"轿车" 那么我必须只得到 1 行
红色,轿车,2.0,本田
如果我只处理我 where 中的一个参数
WHERE ( (ADB.param1 = COALESCE(@param1, ADB.param1))
然后当我发送 param1 时,如果 param1 为空并且它正常,我只会得到一行和所有行
但是当我添加第二个参数检查时
WHERE ( (ADB.param1 = COALESCE(@param1, ADB.param1))
AND (BDB.param2 = COALESCE(@param2 , BDB.param2)) )
仅发送参数1时我一无所获。 但我仍然必须得到 1 行。但一无所获:(
改用OR
AND
WHERE ( (ADB.param1 = COALESCE(@param1, ADB.param1))
OR (BDB.param2 = COALESCE(@param2 , BDB.param2)) )
你可以使用它。
WHERE ( ( @param1 IS NULL OR ( ADB.param1 = @param1 ))
AND ( @param2 IS NULL OR ( BDB.param2 = @param2 ))
AND ( ADB.param1 IS NOT NULL OR ADB.param2 IS NOT NULL ) )