当前位置: 首页 > 面试题库 >

为什么“淲HERE列= NULL”不会在SQL Server中引发错误?

诸葛康胜
2023-03-14
问题内容

考虑下面的代码-
有人可以向我解释为什么一个查询不会引发错误吗?我可以理解为什么它不返回记录,但是它想做什么?请记住,colA是一个int。它在2000、2005和2008
r2上的工作原理相同

create table #foo
( colA int )


insert into #foo
(colA)
values
(null)

select * from #foo --returns the one record we just created

select * from #foo where colA = null --does not throw an error and does not return a record! why??
select * from #foo where colA is null --returns the record

drop table #foo

此表中是否存在可能返回colA = null的记录?

我目前没有其他可用的数据库来尝试这一操作-这是标准还是针对MSSQL的行为?


问题答案:

那是因为NULL不能等于任何值。

禁用ANSI_NULLS选项,然后运行它,您现在将看到该行:

SET ANSI_NULLS OFF
select * from #foo --returns the one record we just created  
select * from #foo where colA = null --does not throw an error and does not return a record! why?? 
select * from #foo where colA is null --returns the record  drop table #foo


 类似资料:
  • 问题内容: 我用Java编写了这个程序 我读到在对象上调用方法会导致,但是上面的程序不是吗?为什么是这样?我是否理解不正确? 问题答案: 是一种方法。一个成员所属的类型,并且不需要一个实例来访问。 甲构件应该仅可以经由型表达访问。也就是说,你应该将其编写如下: Java确实允许你通过对象引用表达式访问成员,但这非常容易引起误解,因为这不是成员访问的实际语义。 通过对象引用表达式访问成员时,仅声明的

  • 问题内容: 我们知道throw的规则是,其中必须是Throwable类型的对象或Throwable的子类。 简单类型(例如int或char)以及不可Throwable类(例如String和Object)不能用作异常。是表示空值的特殊Java文字。 那么为什么要在此代码中进行编译? 问题答案: 根据语言规范,一条语句定义为: 如果计算结果为,则抛出a。特别, 如果对 Expression的 求值正常

  • 问题内容: 我想知道为什么在引用“ w”之后会引发错误。您不是通过说obj = w来创建另一个指向该w实例的指针吗?也就是说,为什么与说谢谢一样呢? 问题答案: 没有什么比早上引用JLS更重要。 JLS 6.3。宣言的范围: 块中的局部变量声明的范围(第14.4节)是该声明在其中出现的其余部分,从其自身的初始化程序开始,并在局部变量声明语句的右侧包括其他任何声明符。 和 JLS 14.2 方块:

  • 我正在做一个编码练习:给定一个整数序列作为一个数组,确定是否可以通过从数组中删除不超过一个元素来获得严格递增的序列。 所以我写了这段代码: 现在,这段代码似乎适用于大多数序列,但这段代码引发了一个错误: 错误如下: 我只是不明白列表索引怎么可能超出范围…有人有线索吗?

  • 问题内容: 类: 类: XML布局: 我试图访问内部的这样的: 我不断收到。我查看了所有文章以了解如何访问,但是没有一篇文章对我有帮助。 有人可以让我知道我在做什么错以及如何解决吗? 我还计划在我的内部添加其他我将来需要访问的。 问题答案: 由于尚未在以下代码段中初始化: 合理抛出。

  • 问题内容: 为什么这段代码没有抛出?看一看: 我不知道! 问题答案: 您为什么不能自己检查一下并抛出异常(如果您要的话)。