让我们假设有一个具有 3 个参数的存储过程。在所有的可能性中,我希望用一个子句来实现这一点,而不会因为使用太多WHERE
而失控......() AND () OR ()
例子:
//Params
@CITY VARCHAR(100) = NULL,
@GENDER VARCHAR(100) = NULL,
@AGE VARCHAR(100) = NULL
我想你可以IF BEGIN ... END
为每个变量(如果存在)使用它,但这会使代码比预期的要长得多。
下面的这种方法不起作用,因为它太长了(大约有 10 个这样的不同字段,但示例只有 3 个。)而且我不确定它是否甚至直接提取了独特的值......
SELECT NAME FROM TABLE
WHERE (
(CITY=@CITY AND GENDER=@GENDER AND AGE=@AGE)
OR (CITY=@CITY AND GENDER=@GENDER)
OR (GENDER=@GENDER AND AGE=@AGE)
OR (CITY=@CITY AND AGE=@AGE)
OR (CITY=@CITY)
OR (GENDER=@GENDER)
OR (AGE=@AGE)
)
有没有更短更有效的方法来做到这一点?
如果是,则该方法最好也与 JOIN 兼容。