问题标签 [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.
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(...) 解决方案或类似解决方案的解决方法。这样我就无法确保有效使用匹配字段的索引。最初的问题是关于与多个匹配字段的合并,其中多个匹配字段可能碰巧为空。
sql-server - 如何找到使用 SET ANSI_NULLS OFF 创建的例程?
我创建了一个过滤的非聚集索引以优化特定的查询集,但我开始从各种来源得到以下错误:
UPDATE 失败,因为以下 SET 选项的设置不正确:“ANSI_NULLS”。验证 SET 选项对于索引视图和/或计算列上的索引和/或过滤索引和/或查询通知和/或 XML 数据类型方法和/或空间索引操作是否正确。
似乎某些遗留例程是使用该SET ANSI_NULLS OFF
选项创建的,并且当引擎尝试从给定上下文更新目标表时,会引发错误。
我想知道有没有办法查看使用此选项创建的例程。例如,如果您编写这样的例程脚本,您会得到如下内容:
我通常使用如下脚本在对象定义中查找内容,但此设置不是其中的一部分:
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,但我为打开所做的一切似乎都不起作用。
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 示例:
sql - 如何在使用 exec 创建存储过程时关闭带引号的标识符
我有一个场景以编程方式更改少数用户定义的表类型的列。为此,我需要删除引用的存储过程。因此,我设计了我的 SQL 脚本来执行以下活动:
- 将存储过程从 sys.sql_modules 表备份到临时表(定义、uses_ansi_nulls 和 uses_quoted_identifier 列)。
- 删除存储过程。
- 更改用户定义的表类型。
- 现在,使用临时表的定义列重新创建存储过程,但我无法使用 uses_ansi_nulls 和 uses_quoted_identifier 列的值。如何在重新创建存储过程时重用 uses_ansi_nulls 和 uses_quoted_identifier 列。
我正在使用游标将暂存列的内容转换为变量,然后使用 exec() 执行存储过程的定义,如下所示:
上面的语句给出了错误:
当我删除 GO 语句时,它会给出错误: