我试图根据传递的参数选择一个查询,但不知怎的,该查询并非在所有情况下都有效。
让我们说这是我的查询:
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但它也不管用..。因为年龄!= 0。
就连我也试过用箱子,但连它也不能正常工作。有人能给我一个简单的查询吗。
发布于 2019-02-12 10:24:58
如果要选择on = NULL,请尝试:
SELECT *
FROM EMPLOYEE
WHERE (
(@pAge IS NULL AND AGE IS NULL)
OR AGE = @pAge
)发布于 2019-02-12 10:32:00
您还可以尝试将它们都转换为0(或任何您想要的):
SELECT *
FROM EMPLOYEE
WHERE ISNULL(@pAge, 0) = ISNULL(Age,0)发布于 2019-02-12 10:28:30
由is NULL检查
DECLARE @tbl TABLE
(
id INT,
name VARCHAR(50),
age INT null
)
INSERT INTO @tbl
(
id,
name,
age
)
VALUES
(1, 'Abhishek', 30),
(2, 'Surajit', NULL),
(3, 'Utpal', 44)
DECLARE @pAge INT = null
SELECT * FROM @tbl t
WHERE t.age IN (@pAge) OR (t.age IS NULL AND @pAge IS null)https://stackoverflow.com/questions/54647820
复制相似问题