假设有一个存储过程有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兼容.
解决方法
除了ISNULL / COALESCE选项,您还可以将参数测试为null:
SELECT NAME FROM TABLE WHERE (@City IS NULL OR City = @City) AND (@Gender IS NULL OR Gender = @Gender) AND (@Age IS NULL OR Age = @Age)