此查询中 IsNull 的用途是啥?
Posted
技术标签:
【中文标题】此查询中 IsNull 的用途是啥?【英文标题】:What is the Purpose of the IsNull in this query?此查询中 IsNull 的用途是什么? 【发布时间】:2020-03-10 12:28:38 【问题描述】:我有一个桌面应用程序,我正在将其转换为 Web,但我无法理解查询的 IsNull 部分的用途。该查询是针对 SQL 女士的,我知道它有一个 IsNull 函数,但事实并非如此。所以我对它的目的感到困惑。以下是我的查询:
UPDATE tb_category
SET
Email = @Email,
CandidateID = @CandidateID,
Code = @Code,
TestDate = @TestDate,
Description = @Description,
PointsEarned = @PointsEarned,
PointsAvailable = @PointsAvailable,
Average25th = @Average25th,
Average75th = @Average75th,
ImportedDate = @ImportedDate,
CreationDate = @CreationDate,
TestNum = @TestNum,
CategoryNum = @CategoryNum
WHERE ((Email = @Original_Email)
AND (CandidateID = @Original_CandidateID)
AND (Code = @Original_Code)
AND (TestDate = @Original_TestDate)
AND ((@IsNull_Description = 1 AND Description IS NULL) OR (Description = @Original_Description))
AND (PointsEarned = @Original_PointsEarned)
AND ((@IsNull_PointsAvailable = 1 AND PointsAvailable IS NULL) OR (PointsAvailable =
@Original_PointsAvailable))
AND ((@IsNull_Average25th = 1 AND Average25th IS NULL) OR (Average25th = @Original_Average25th))
AND ((@IsNull_Average75th = 1 AND Average75th IS NULL) OR (Average75th = @Original_Average75th))
AND ((@IsNull_ImportedDate = 1 AND ImportedDate IS NULL) OR (ImportedDate = @Original_ImportedDate))
AND ((@IsNull_CreationDate = 1 AND CreationDate IS NULL) OR (CreationDate = @Original_CreationDate))
AND (TestNum = @Original_TestNum)
AND (CategoryNum = @Original_CategoryNum));
我尝试通过删除 IsNull 部分来简化更新语句,但这不起作用。
【问题讨论】:
【参考方案1】:在 SQL 中,null 不等于 (=) 任何东西——甚至不等于另一个 null,因此在查询中如果两个值都为 null(旧的和新的),您需要考虑到这一点并使用 IS 检查值空。
【讨论】:
这很烦人。谢谢。【参考方案2】:我看到这种模式在 WHERE
子句中重复了多次:
@IsNull_Description = 1 AND Description IS NULL
这意味着一个变量@IsNull_SomeColumnName
,大概是在代码前面设置的,其值为1
,该变量所关联的列当前为NULL
。
函数IsNull(Param1, Param2)
用于如果第一个参数IS NULL
,则用第二个参数的值代替第一个参数的值,函数返回Param2
的值。
在 SQL Server 和许多其他 RDBMS 中,IS NULL
语法用于检查值当前是否为 NULL
。在这里,Description IS NULL
将返回 TRUE
,如果 Description
为 null,则返回 FALSE
,如果不是。
【讨论】:
以上是关于此查询中 IsNull 的用途是啥?的主要内容,如果未能解决你的问题,请参考以下文章
AttributeError:类型对象'Categories'在Django中没有属性'user_id__isnull'