相关疑难解决方法(0)

为什么NULL = NULL在SQL Server中评估为false

在SQL Server中,如果 nullParam=NULL在where子句中,它总是计算为false.这是违反直觉的,并且给我带来了许多错误.我确实理解IS NULLIS NOT NULL关键字是正确的方法.但是为什么SQL服务器会以这种方式运行?

sql sql-server null

137
推荐指数
10
解决办法
11万
查看次数

IS NULL和= NULL之间有什么区别吗?

我很惊讶地看到IS NULL和= NULL在select查询中产生不同的结果.他们之间有什么区别?什么时候用.如果你能详细解释我,我会很高兴的.

sql sql-server sql-server-2005

42
推荐指数
3
解决办法
2万
查看次数

为什么SQL不支持"= null"而不是"null"?

我没有问,如果它.我知道事实并非如此.

我很好奇原因.我已经阅读了支持文档,例如关于在MySQL中使用Nulls的支持文档,但它们并没有给出任何理由.他们只重复你必须使用的"是空"的口头禅.

这一直困扰着我.在进行动态SQL(那些必须要做的极少数时间)时,将"null"传递给where子句会更容易:

@where = "where GroupId = null"
Run Code Online (Sandbox Code Playgroud)

这将是常规变量的简单替换.相反,我们必须使用if/else块来执行以下操作:

if @groupId is null then
     @where = "where GroupId is null"
else
     @where = "where GroupId = @groupId"
end
Run Code Online (Sandbox Code Playgroud)

在更大更复杂的查询中,这是一个巨大的痛苦.有没有特定的原因,SQL和所有主要的RDBMS供应商都不允许这样做?它会产生某种关键字冲突或价值冲突?

编辑:

许多答案的问题(在我看来)是每个人都在设置null和"我不知道它的值是什么"之间的等价.这两件事之间存在巨大差异.如果null意味着"有一个值,但它是未知的"我会100%同意空值不能相等.但SQL null并不意味着.这意味着没有价值.任何两个为null的SQL结果都没有值. 没有价值不等于未知价值.两件不同的事情.这是一个重要的区别.

编辑2:

我遇到的另一个问题是其他HLL允许null = null完全正常并适当地解决它.例如,在C#中,null = null返回true.

sql null

25
推荐指数
5
解决办法
6681
查看次数

标签 统计

sql ×3

null ×2

sql-server ×2

sql-server-2005 ×1