gpt4 book ai didi

sql - 基于 SQL Server 参数值的条件 WHERE

转载 作者:行者123 更新时间:2023-12-03 21:35:17 26 4
gpt4 key购买 nike

我正在修改 SQL 服务器中现有的存储过程,并试图提出一个应该采用条件的查询 WHERE取决于输入参数之一是否为 null或有值(value)。

存储过程接受三个输入参数

@FromDate
@ToDate
@PersonnelNo
@FromDate@ToDate将永远有值(value),并将成为 WHERE 的一部分条件但 @PersonnelNo可以为空或可以保存值。

@PersonnelNo为空 我想要给定 @FromDate 的所有用户并到 @ToDate日期但当参数 @PersonnelNo有一个值,那么我希望存储过程只返回该用户的数据。

我尝试了以下两种方法,但只有当我输入 @PersonnelNo 的值时它才有效(正确给出一个用户记录) .如果我输入 @PersonnelNo,它不会返回任何记录如 null ,而是我想要所有用户。

知道我哪里出错了,或者我目前采取的方法有可能吗?
SELECT  FirstName,
LastName,
PersonnelNum,
RecCreatedOn
FROM [test].Person
WHERE RecCreatedOn BETWEEN @FromDate AND @ToDate
AND (
(ISNULL(@PersonnelNo, 0) != 0 AND PersonnelNum = @PersonnelNo)
)

和稍微不同的 WHERE 子句
WHERE   RecCreatedOn BETWEEN @FromDate AND @ToDate
AND ((@PersonnelNo IS NOT NULL) AND PersonnelNum = @PersonnelNo)

最佳答案

这是通过说如果@PersonnelNo 为空则用PeronnelNum 替换它来工作的。 PersonnelNum 将始终等于 PersonnelNum,因此如果 @PersonnelNo 为空,则此条件将始终为真。

SELECT  FirstName,
LastName,
PersonnelNum,
RecCreatedOn
FROM [test].Person
WHERE RecCreatedOn BETWEEN @FromDate AND @ToDate
AND (@PersonnelNo is null or PersonnelNum = @PersonnelNo)

您之前尝试的解释:
ISNULL(@PersonnelNo, 0) != 0 AND PersonnelNum = @PersonnelNo

如果@PersonnelNo 为空,则变为:
  • 0 != 0 and PersonnelNum = 0 .
  • 这变成了 false and false
  • 变成 false
  • 所以不会返回任何行

  • 如果@PersonnelNo 是(例如)1,则变为:
  • 1 != 0 and PersonnelNum = 1 .
  • 这变成了 true and true (for the row where PersonnelNum is 1)
  • 变成 true
  • 所以你会看到第 1 个人所在的行。

    (@PersonnelNo 不为空) AND PersonnelNum = @PersonnelNo

  • 如果@PersonnelNo 为空,则变为:
  • (null is not null) and PersonnelNum = null .
  • 这变成了 false and false
  • 变成 false
  • 所以不会返回任何行

  • 如果@PersonnelNo 是(例如)1,则变为:
  • 1 is not null and PersonnelNum = 1 .
  • 这变成了 true and true (for the row where PersonnelNum is 1)
  • 变成 true
  • 所以你会看到第 1 个人所在的行。

  • 有效的方法:
  • PersonnelNum = coalesce(@PersonnelNo,PersonnelNum)
  • (@PersonnelNo is null or PersonnelNum = @PersonnelNo)

  • 不过,上述方法之间存在细微差别。如 PersonnelNum可以为空,您可能会得到不同的结果;即 coalesce方法不会在此列中包含具有空值的行,而第二种方法会。

    关于sql - 基于 SQL Server 参数值的条件 WHERE,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24746689/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com