空的参数化查询

时间:2019-02-12 10:22:37

标签: sql sql-server

我试图根据传递的参数来选择查询,但是某种程度上该查询无法在所有情况下都起作用。

可以说这是我的查询:

SELECT * FROM EMPLOYEE WHERE AGE = @pAge

现在让我们考虑一下该表

EmpId | EmpName | Age 
1     | Abhishek | 30  
2     | Surajit  | NULL  
3     | Utpal    | 44

现在的问题是,当我传递@pAge = NULL时,它应该选择Surajit,而当我传递值时,它应该选择与指定匹配的值。看起来很简单,但我没有其他选择。第一个查询不起作用,因为NULL!= NULL。

让我们看看我尝试过的内容:

SELECT * FROM EMPLOYEE WHERE (@pAge is null Or AGE = @pAge)

这不起作用,因为当我传递null时,它将选择所有内容。

SELECT * FROM EMPLOYEE WHERE IsNull(@pAge, 0) = Age

但是它不能正常工作...因为Age!=0。

即使我尝试使用大小写,也无法正常工作。谁能给我简单的查询。

3 个答案:

答案 0 :(得分:6)

如果要选择NULL = NULL,请尝试:

SELECT * 
FROM   EMPLOYEE 
WHERE (
         (@pAge IS NULL AND AGE IS NULL)
      OR AGE = @pAge
      )

答案 1 :(得分:2)

您还可以尝试将它们都转换为0(或任何您想要的值):

SELECT  * 
FROM    EMPLOYEE 
WHERE   ISNULL(@pAge, 0) = ISNULL(Age,0)

答案 2 :(得分:1)

通过0F423F进行检查:

is NULL