如何查询参数是否为空(当一个或多个参数为空时,具有多个参数和select语句会发生变化)
How to query if parameter is null ( having multiples parameters and select statement changes when one or multiples parameters are null)
我正在基于具有多个列的 SQL table 创建 SSRS 报告。
在我的报告中,我有多达 10 个参数。我想创建一个数据集,它将根据参数(每个参数都是查询中的一个条件)填充我的报告。问题是除一个参数外,我的所有参数都可以为 NULL。
根据一些研究,我发现“如果嵌套”可以工作,基本上是这样的:
if(@param1 IS NOT NULL)
{
SELECT * from table
WHERE Column_1=@param1 ;
}
else
if(@param1 IS NOT NULL AND @param2 IS NOT NULL)
{
SELECT * from table where Colum_1=@param1 AND Column_2=@param2;
}
else.....
但我很快意识到,因为我有 10 个参数,所以如果我想涵盖所有情况,那么有很多组合 (IF)。例如,如果我认为 3 个参数不为空,那么我将不得不为 (param1, param2, param3) 不为空的情况添加一个 IF,另一个为 (param1, param2, param4) 不为空的情况, (param1, param2, param5), (param1, param2, param6)....同样当4个参数不为空,5个参数不为空一直到10个参数不为空。
关于构建此查询的更好方法和更少时间的任何想法?
谢谢!
你可以像这样很简单地做到这一点。
SELECT * FROM myTable
WHERE (Col1 = @p1 OR @p1 IS NULL)
AND (Col2 = @p2 OR @p2 IS NULL)
AND (Col3 = @p3 OR @p3 IS NULL)
等等...
我正在基于具有多个列的 SQL table 创建 SSRS 报告。 在我的报告中,我有多达 10 个参数。我想创建一个数据集,它将根据参数(每个参数都是查询中的一个条件)填充我的报告。问题是除一个参数外,我的所有参数都可以为 NULL。 根据一些研究,我发现“如果嵌套”可以工作,基本上是这样的:
if(@param1 IS NOT NULL)
{
SELECT * from table
WHERE Column_1=@param1 ;
}
else
if(@param1 IS NOT NULL AND @param2 IS NOT NULL)
{
SELECT * from table where Colum_1=@param1 AND Column_2=@param2;
}
else.....
但我很快意识到,因为我有 10 个参数,所以如果我想涵盖所有情况,那么有很多组合 (IF)。例如,如果我认为 3 个参数不为空,那么我将不得不为 (param1, param2, param3) 不为空的情况添加一个 IF,另一个为 (param1, param2, param4) 不为空的情况, (param1, param2, param5), (param1, param2, param6)....同样当4个参数不为空,5个参数不为空一直到10个参数不为空。
关于构建此查询的更好方法和更少时间的任何想法?
谢谢!
你可以像这样很简单地做到这一点。
SELECT * FROM myTable
WHERE (Col1 = @p1 OR @p1 IS NULL)
AND (Col2 = @p2 OR @p2 IS NULL)
AND (Col3 = @p3 OR @p3 IS NULL)
等等...