问题标签 [ansi-nulls]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
285 浏览

sql-server - SQL Server 2008R2:SET ANSI_NULLS OFF 不影响与空值的合并匹配

我已经阅读了在当前会话中使用“SET ANSI_NULLS OFF”以便能够将 NULL = NULL 评估为 true,例如,以下示例显示了 ANSI_NULLS ON 和 ANSI_NULLS OFF 之间的区别:

问题一:

结果:'NULL = NULL'

查询 B:

结果:“不匹配”

因此,这显示了 ON 和 OFF 设​​置之间的差异。

在标准选择语句的 where 子句中使用它时,这似乎也有效。

但是,当源字段和目标字段为空时,这似乎在合并中不起作用。

重现一个简单的场景:

创建测试表:

合并查询

如果匹配,则计数器加 1。如果不匹配,则插入新行。两次运行查询时,结果是两行,这不是我在 ansi_nulls 关闭时所期望的。

如果我将值 NULL 更改为“test”,则匹配效果很好,例如

使用(值(NULL))=>使用(值('test'))

使用合并时是否会发生一些特殊行为来解释这一点?还是sql server中的错误?

注意:我不是在寻找使用 ISNULL(...) 解决方案或类似解决方案的解决方法。这样我就无法确保有效使用匹配字段的索引。最初的问题是关于与多个匹配字段的合并,其中多个匹配字段可能碰巧为空。

0 投票
2 回答
418 浏览

sql-server - 如何找到使用 SET ANSI_NULLS OFF 创建的例程?

我创建了一个过滤的非聚集索引以优化特定的查询集,但我开始从各种来源得到以下错误:

UPDATE 失败,因为以下 SET 选项的设置不正确:“ANSI_NULLS”。验证 SET 选项对于索引视图和/或计算列上的索引和/或过滤索引和/或查询通知和/或 XML 数据类型方法和/或空间索引操作是否正确。

似乎某些遗留例程是使用该SET ANSI_NULLS OFF选项创建的,并且当引擎尝试从给定上下文更新目标表时,会引发错误。

我想知道有没有办法查看使用此选项创建的例程。例如,如果您编写这样的例程脚本,您会得到如下内容:

我通常使用如下脚本在对象定义中查找内容,但此设置不是其中的一部分:

0 投票
0 回答
13 浏览

sql-server - SQL Server ANSI_NULLS 混淆是否已设置

因此,虽然我了解它的用途以及我想要它的原因。我有一个客户数据库,其中有一些如何在关闭的情况下创建的。似乎有很多地方可以更改此值,在服务器上,在 SSMS 选项中的数据库上

我的困惑是我如何知道对象是在打开还是关闭的情况下创建的。

当我右键单击 SP 或 FN 并单击修改时,它总是在 SET ANSI_NULLS OFF 中添加它应该是 SET ANSI_NULLS_ON 这让我相信它被存储为 OFF 而不是 ON

我无法做到的是,如果我在使用修改选项时删除并创建一个带有 SET ANSI_NULLS ON 的对象,它仍然显示为 OFF。

我确定我只是不明白一些事情。

我确实找到了

这告诉我哪些对象关闭了 ANSI_NULLS,但我为打开所做的一切似乎都不起作用。

0 投票
1 回答
120 浏览

sql - 将 T-SQL 转换为 GCP BigQuery SQL。如何使 BQ SQL 中的 null <> null 与 SQL Server T-SQL 相同?

尝试将 SQL 脚本从 SQL Server T-SQL 转换为 GCP BigQuery SQL,并且需要维护 ansi nulls 设置以确保相同的结果。有没有办法让 Google BigQuery 在比较 null = null 时返回 true(即下面的“null = null is true”)?

显示不同输出的 T-SQL 和 BigQuery 示例:

0 投票
2 回答
99 浏览

sql - 如何在使用 exec 创建存储过程时关闭带引号的标识符

我有一个场景以编程方式更改少数用户定义的表类型的列。为此,我需要删除引用的存储过程。因此,我设计了我的 SQL 脚本来执行以下活动:

  1. 将存储过程从 sys.sql_modules 表备份到临时表(定义、uses_ansi_nulls 和 uses_quoted_identifier 列)。
  2. 删除存储过程。
  3. 更改用户定义的表类型。
  4. 现在,使用临时表的定义列重新创建存储过程,但我无法使用 uses_ansi_nulls 和 uses_quoted_identifier 列的值。如何在重新创建存储过程时重用 uses_ansi_nulls 和 uses_quoted_identifier 列。

我正在使用游标将暂存列的内容转换为变量,然后使用 exec() 执行存储过程的定义,如下所示:

上面的语句给出了错误:

当我删除 GO 语句时,它会给出错误: