我试图根据传递的参数来选择查询,但是某种程度上该查询无法在所有情况下都起作用。
可以说这是我的查询:
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。
即使我尝试使用大小写,也无法正常工作。谁能给我简单的查询。
答案 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