我有一个存储过程,可根据4个参数从表中获取信息。
我想基于参数获取值,但是如果参数为NULL,则不会检查该参数。因此,如果所有4个参数都为null,则将显示整个表。
这是我的SP(如您所见,这仅适用于1个参数atm):
CREATE PROCEDURE myProcedure @Param1 nvarchar(50), @Param2 nvarchar(50), @Param3 nvarchar(50), @Param4 nvarchar(50) AS BEGIN IF(@Param1 IS NULL) BEGIN SELECT Id, col1, col2, col3, col4 FROM myTable END ELSE BEGIN SELECT Id, col1, col2, col3, col4 FROM myTable WHERE col1 LIKE @Param1+'%' END END
有什么方法可以做到, 而 不必IF为每种可能的组合都加一个(15个IF)?
IF
怎么样
SELECT Id, col1, col2, col3, col4 FROM myTable WHERE col1 LIKE @Param1+'%' OR @Param1 IS NULL
在这种情况下,您可能还使用了
SELECT Id, col1, col2, col3, col4 FROM myTable WHERE col1 LIKE ISNULL(@Param1,'')+'%'
但总的来说,您可以尝试类似
SELECT Id, col1, col2, col3, col4 FROM myTable WHERE (condition1 OR @Param1 IS NULL) AND (condition2 OR @Param2 IS NULL) AND (condition3 OR @Param3 IS NULL) ... AND (conditionN OR @ParamN IS NULL)