我有2个搜索参数。
我什么也不能传递,然后必须从DB获取所有行。
或者我可以传递Param1并获得ADB.param1=param1
或者我可以传递Param2并获得ADB.param2=param2
或者我可以传递Param1和Param2并获得ADB.param1=param1
and ADB.param2=param2
让我们想象一下,我有类似的数据库
CarColor,CarType,CarEngineVolume,CarMakeName param1是CarColor param2是CarType 如果我选择DB而没有发送参数,则必须获取整个行列表
红色,轿车2.0,本田
蓝色,轿车,3.0,宝马
绿色,皮卡,4.0,福特
如果我仅发送param2,例如“轿车” 我必须得到以下列表
红色,轿车,2.0,本田
蓝色,轿车,3.0,宝马
但是如果我同时发送两个参数,例如param1“ red”和param2“ sedan” 那么我只能得到1行
红色,轿车,2.0,本田
如果我在where里只处理一个参数
WHERE ( (ADB.param1 = COALESCE(@param1, ADB.param1))
然后,当我发送param1时,如果param1为null并且可以,那么我只会得到一行,并且所有行都将显示
但是当我添加第二个参数检查
WHERE ( (ADB.param1 = COALESCE(@param1, ADB.param1))
AND (BDB.param2 = COALESCE(@param2 , BDB.param2)) )
仅发送param1时我什么也没得到。 但是我仍然必须获得1行。但是什么也没得到:(
答案 0 :(得分:1)
使用OR
代替AND
WHERE ( (ADB.param1 = COALESCE(@param1, ADB.param1))
OR (BDB.param2 = COALESCE(@param2 , BDB.param2)) )
答案 1 :(得分:0)
您可以使用它。
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 ) )