让我们假设有一个存储过程有3个参数.在所有的可能性中,我希望用一个单独的WHERE条款实现这一点,而不会因为使用() AND () OR ()太多而失去控制......
例:
//Params
@CITY VARCHAR(100) = NULL,
@GENDER VARCHAR(100) = NULL,
@AGE VARCHAR(100) = NULL
Run Code Online (Sandbox Code Playgroud)
我想你可以使用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)
)
Run Code Online (Sandbox Code Playgroud)
有没有更短的更有效的方法来做到这一点?
如果是,则该方法最好也与JOIN兼容.