- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
定义说:
When SET ANSI_NULLS is ON, a SELECT statement that uses WHERE column_name = NULL returns zero rows even if there are null values in column_name. A SELECT statement that uses WHERE column_name <> NULL returns zero rows even if there are non-null values in column_name.
这是否意味着此查询中不会包含空值?
SELECT Region
FROM employees
WHERE Region = @region
或者 ANSI_NULL
只涉及像这样的查询(其中 WHERE
包含特定单词 NULL
)?
SELECT Region
FROM employees
WHERE Region = NULL
最佳答案
这意味着,在第一个示例中使用时,如果 @region
为 NULL
,则不会返回任何行,即使表中存在 的行区域
为NULL
。
当ANSI_NULLS
打开时(无论如何你应该始终设置它,因为将来不打开它的选项将被删除),任何比较操作(至少)操作数为 NULL
会产生第三个逻辑值 - UNKNOWN
(与 TRUE
和 FALSE
相对)。
UNKNOWN
值如果尚未确定,则通过任何组合 bool 运算符传播(例如,带有 FALSE
操作数的 AND
或 OR
与 TRUE
操作数)或否定(NOT
)。
WHERE
子句用于过滤 FROM
子句生成的结果集,使得 WHERE
子句的总体值必须为 TRUE
表示该行不被过滤掉。因此,如果任何比较产生 UNKNOWN
,就会导致该行被过滤掉。
@user1227804 的 answer包括这句话:
If both sides of the comparison are columns or compound expressions, the setting does not affect the comparison.
来自SET ANSI_NULLS
*
但是,我不确定它想表达什么意思,因为如果比较两个 NULL
列(例如在 JOIN
中),比较仍然会失败:
create table #T1 (
ID int not null,
Val1 varchar(10) null
)
insert into #T1(ID,Val1) select 1,null
create table #T2 (
ID int not null,
Val1 varchar(10) null
)
insert into #T2(ID,Val1) select 1,null
select * from #T1 t1 inner join #T2 t2 on t1.ID = t2.ID and t1.Val1 = t2.Val1
上面的查询返回 0 行,而:
SELECT * FROM #T1 t1 INNER JOIN #T2 t2
ON t1.ID = t2.ID
AND ( t1.Val1 = t2.Val1
OR t1.Val1 IS NULL
AND t2.Val1 IS NULL )
返回一行。因此,即使两个操作数都是列,NULL
也不等于NULL
。还有documentation for =
没有关于操作数的任何内容:
When you compare two
NULL
expressions, the result depends on theANSI_NULLS
setting:If
ANSI_NULLS
is set toON
, the result isNULL
1, following the ANSI convention that aNULL
(or unknown) value is not equal to anotherNULL
or unknown value.If
ANSI_NULLS
is set toOFF
, the result ofNULL
compared toNULL
isTRUE
.Comparing
NULL
to a non-NULL
value always results inFALSE
2.
但是,1 和 2 都不正确 - 两个比较的结果都是UNKNOWN
。
*这段文字的神秘含义在多年后终于被发现。它实际上意味着,对于这些比较,该设置没有任何效果,并且它始终表现得就像该设置处于打开状态。如果它指出 SET ANSI_NULLS OFF
是无效的设置,那就更清楚了。
关于sql - 在SQL Server中, "SET ANSI_NULLS ON"是什么意思?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9766717/
我想将 MySQL 数据库连接到 Assure Id 2009 软件。当我导入 SQL 文件时,出现如下错误: 未知的系统变量“ANSI_NULLS” 我的 SQL 是这样的: SET ANSI_NU
我想检查@a是否与“ ansi_nulls off”中的@b不同: set ansi_nulls off declare @a int = 1; declare @b int = null; sele
我写了一个触发器。 USE [TEST] GO /****** Object: Trigger [dbo].[TR_POSTGRESQL_UPDATE_YC] Script Date: 05/
在我们的数据库中有一个使用 ANSI_NULLS OFF 创建的表。 .现在我们已经使用这个表创建了一个 View 。我们想为这个 View 添加一个聚集索引。 在创建聚集索引时,它显示了一个错误,例
在运行一些查询之前,我必须设置 ANSI_NULLS 和其他一些数据库选项。所以在我的代码中 const string query_prefix = "SET ANSI_NULLS ON \n GO
我有一个问题,我们总是说 null =null 是假的,我想知道当 ansi_nulls 关闭时,这个声明“null=null”也是假的?谢谢 最佳答案 当 ANSI_NULLS OFF 时,NULL
SET ANSI_NULLS ON; -- Query1 SELECT 'StackOverFlow' AS Statement11 WHERE 'Name' IN ('S','Q', 'L', 'N
我今天正在处理 10 多年前编写的旧 Delphi 应用程序。部分应用程序包含将在应用程序中构建更新语句然后将它们发送到 SQL Server 以运行的组件。 我需要做的工作是尝试加快一些查询的速度。
我们在 ANSI_NULLS 设置和计算列方面存在一些问题,并且我们有大量的存储过程 SET ANSI_NULLS OFF 我们想将它们全部更改为 SET ANSI_NULLS ON 有没有一种简单的
SET ANSI_NULLS OFF 的作用是什么? 最佳答案 From MSDN: The SQL-92 standard requires that an equals (=) or not eq
我会认为 SET ANSI_NULLS OFF 模式非常方便,如果它始终如一地工作,我会默认使用它 - 允许在任何地方使用 = 或 != 来比较空值。但只有当我与显式内联 null 进行比较时它才有效
我想调用这个发送一个值的过程,该值可以是 NULL 或任何 int 值。 SELECT DomainName, DomainCode FROM Tags.tblDomain WHERE SubDoma
SET ANSI_NULLS OFF 似乎在 TSQL 中给出不同的结果,具体取决于您是比较表中的字段还是值。谁能帮助我理解为什么我的最后两个查询没有结果?我不是在寻找解决方案,只是在寻找解释。 se
定义说: When SET ANSI_NULLS is ON, a SELECT statement that uses WHERE column_name = NULL returns zero r
注意:我检查了 Understanding QUOTED_IDENTIFIER它没有回答我的问题。 我让我的 DBA 运行我在 Prod 服务器上创建的索引(他们查看并批准了它)。 它像我想要的那样加
所以我一直在创建脚本的时候盲目地使用ansi_nulls on,quoted_identifier on,因为sqlserver在脚本化对象的时候会自动生成它们.. 我真的没有时间关心这些琐碎的废话
documentation指出数据库 ANSI_NULLS 标志控制在某些方面与 null 进行比较的行为。 我在查 this stack overflow post检查如何确定(未设置)此标志的值。
我可以更改 SET ANSI_NULLS 的值通过使用 SET ANSI_NULLS OFF或 SET ANSI_NULLS ON 问题 #1 如何获得当前值? 问题 #2 设置值是否应用于查询? t
关闭。这个问题是opinion-based 。目前不接受答案。 想要改进这个问题吗?更新问题,以便 editing this post 可以用事实和引文来回答它。 . 已关闭 9 年前。 Improv
在搜索 ansi_nulls 时,我偶然发现了这篇文章,其中说 MySQL 没有实现 ansi_nulls,并且 MsSql 计划删除它:something about ansi_nulls 微软在2
我是一名优秀的程序员,十分优秀!