首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Null参数化查询

Null参数化查询
EN

Stack Overflow用户
提问于 2019-02-12 10:22:36
回答 3查看 82关注 0票数 2

我试图根据传递的参数选择一个查询,但不知怎的,该查询并非在所有情况下都有效。

让我们说这是我的查询:

代码语言:javascript
复制
SELECT * FROM EMPLOYEE WHERE AGE = @pAge

现在让我们考虑一下这张桌子

代码语言:javascript
复制
EmpId | EmpName | Age 
1     | Abhishek | 30  
2     | Surajit  | NULL  
3     | Utpal    | 44

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

让我们看看我尝试过的:

代码语言:javascript
复制
SELECT * FROM EMPLOYEE WHERE (@pAge is null Or AGE = @pAge)

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

代码语言:javascript
复制
SELECT * FROM EMPLOYEE WHERE IsNull(@pAge, 0) = Age

但它也不管用..。因为年龄!= 0。

就连我也试过用箱子,但连它也不能正常工作。有人能给我一个简单的查询吗。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2019-02-12 10:24:58

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

代码语言:javascript
复制
SELECT * 
FROM   EMPLOYEE 
WHERE (
         (@pAge IS NULL AND AGE IS NULL)
      OR AGE = @pAge
      )
票数 6
EN

Stack Overflow用户

发布于 2019-02-12 10:32:00

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

代码语言:javascript
复制
SELECT  * 
FROM    EMPLOYEE 
WHERE   ISNULL(@pAge, 0) = ISNULL(Age,0)
票数 2
EN

Stack Overflow用户

发布于 2019-02-12 10:28:30

is NULL检查

代码语言:javascript
复制
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)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54647820

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档