SQL Server:在{表达式}时为空,在{表达式}则为空的情况下选择情况

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SQL Server:在{表达式}时为空,在{表达式}则为空的情况下选择情况相关的知识,希望对你有一定的参考价值。

所以我有这段代码,它是存储过程的一部分

INSERT INTO #TempTable
/* A few subqueries, about 100 lines */
WHERE    (cartera.ClaSucursal = @pIdSucursal OR @pIdSucursal = -1)
AND      (cartera.ClaAsesorActual = 
         CASE
             WHEN @pIdAsesor > 0 THEN @pIdAsesor
             WHEN @pIdAsesor = 0 THEN NULL 
         END
         OR @pIdAsesor = -1)
/* Rest of my code, about 200 lines */
SELECT * FROM #TempTable

基本上,我有一个名为@pIdAsesor的参数,根据其值,可能会有三个可能的结果。

  1. [@pIdAsesor = -1这使我所有与ID值有关的条目]
  2. [@pIdAsesor = sumId这会带给我所有具有给定ID的条目
  3. @pIdAsesor = 0将所有带NULL作为ID的条目带给我

结果1和2完美地工作,但是方案3并没有带来结果。

答案

u无法说=,如果结果为null时为null,但是= null不起作用,您必须说为null

另一答案

null不是值-缺少值。 null从不等于任何东西(甚至不等于其他任何null),但是您可以使用is运算符显式检查它。

您可以放弃case表达式并使用一系列or来构建此逻辑:

AND      ((@pIdAsesor = -1) OR
          (@PIdAsesor = 0 AND cartera.ClaAsesorActual IS NULL) OR
          (@pIdAsesor = cartera.ClaAsesorActual))

以上是关于SQL Server:在{表达式}时为空,在{表达式}则为空的情况下选择情况的主要内容,如果未能解决你的问题,请参考以下文章

SOAP UI:获取响应时出错;尝试连接到 Microsoft SQL Server 时为 null

sql server中表达式null=0的值是

如何从XML *向SQL Server DATE字段*中插入NULL

SQL Server-表表达式基础

Sql server 表表达式

在 SQL Server 中使用正则表达式