Sql 大select中的多个where语句

Sql 大select中的多个where语句,sql,sql-server,if-statement,null,where,Sql,Sql Server,If Statement,Null,Where,我有两个搜索参数 我不能传递任何内容,然后我必须从DB获取所有行。 或者我可以传递Param1并获取行,其中ADB.Param1=Param1 或者我可以传递Param2并获取行,其中ADB.Param2=Param2 或者我可以传递Param1和Param2,并获取行,其中ADB.Param1=Param1 和ADB.param2=param2 让我们想象一下,我有一个DB CarColor、CarType、CarEngineVolume、CarMakeName param1是CarCol

我有两个搜索参数

  • 我不能传递任何内容,然后我必须从DB获取所有行。 或者我可以传递Param1并获取行,其中
    ADB.Param1=Param1

  • 或者我可以传递Param2并获取行,其中
    ADB.Param2=Param2

  • 或者我可以传递Param1和Param2,并获取行,其中
    ADB.Param1=Param1
    和ADB.param2=param2

让我们想象一下,我有一个DB

CarColor、CarType、CarEngineVolume、CarMakeName param1是CarColor param2是CarType 如果我选择DB而不发送参数,我必须得到整个行列表

红色、轿车、2.0、本田
蓝色、轿车、3.0、宝马
绿色,皮卡,4.0,福特

如果我只发送param2,例如“sedan” 我必须得到下面的清单

红色,轿车,2.0,本田

蓝色,轿车,3.0,宝马

但如果我同时发送两个参数,例如param1“red”和param2“sedan” 那我只能得到一排

红色,轿车,2.0,本田

如果我在where中只处理一个参数

WHERE (   (ADB.param1 = COALESCE(@param1, ADB.param1))
然后,当我发送param1时,如果param1为null且其为OK,我只得到一行和所有行

但当我添加第二个参数检查时

    WHERE (   (ADB.param1 = COALESCE(@param1, ADB.param1)) 
AND (BDB.param2 = COALESCE(@param2 , BDB.param2))  )
只发送参数1时,我什么也得不到。
但我仍然必须得到1排。但是什么也得不到:(

代替

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 ) )

我可以,但如果我同时发送这两个参数会发生什么?它们不会同时被视为param1或param2(两者中的任何一个)匹配,它将返回行是的,但我希望该行同时匹配它们。@David,如果你告诉我你作为param1和param2传递的内容,那就很容易理解它们是搜索参数。我什么也不能传递。或者我可以传递param1,或者我可以传递param2,或者我可以传递param1和param2来搜索数据。你是否发送了e@param2的mpty字符串或您是否发送NULL?如果为NULL,则在添加参数System.Data.SqlClient.SqlException时发送DBNull:“关键字“is”附近的语法不正确。您可以再次检查查询中的括号吗?我对其进行了测试,此查询未给出此异常。我已直接通过SQL进行了检查,并且是否发送NULL参数我接收所有行,但只有第一行包含数据。“如果我发送空参数,我接收所有行,但只有第一行包含数据”您不想获取空参数的所有行吗?如果我不发送参数,我想获取所有行及其数据。这意味着我没有特定的搜索选项,因此我想按原样列出whoe DB。