gpt4 book ai didi

sql - ANSI_NULLS 和 QUOTED_IDENTIFIER 杀死了一些东西。它们是为了什么?

转载 作者:行者123 更新时间:2023-12-02 00:32:56 26 4
gpt4 key购买 nike

注意:我检查了 Understanding QUOTED_IDENTIFIER它没有回答我的问题。

我让我的 DBA 运行我在 Prod 服务器上创建的索引(他们查看并批准了它)。

它像我想要的那样加快了我的查询速度。但是,我开始收到这样的错误:

UPDATE failed because the following SET options have incorrect settings: ANSI_NULL, QUOTED_IDENTIFIER, CONCAT_NULL_YIELDS_NUL



作为开发人员,我通常会忽略这些设置。它从来都不重要。 (超过 9 年)。嗯,今天很重要。

我去查看了一个失败的 sproc,它在为 sproc 创建之前有这个:
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

谁能从应用程序开发人员的角度告诉我这些 set 语句的作用? (只是在我的 index create 语句之前添加上面的代码并没有解决问题。)

注意:以下是我的索引的示例:
CREATE NONCLUSTERED INDEX [ix_ClientFilerTo0]
ON [ClientTable] ([Client])
INCLUDE ([ClientCol1],[ClientCol2],[ClientCol3] ... Many more columns)
WHERE Client = 0


CREATE NONCLUSTERED INDEX [IX_Client_Status]
ON [OrderTable] ([Client],[Status])
INCLUDE ([OrderCol1],[OrderCol2],[OrderCol3],[OrderCol4])
WHERE [Status] <= 7
GO

最佳答案

好的,从应用程序开发人员的角度来看,以下是这些设置的作用:

QUOTED_IDENTIFIER

此设置控制如何使用引号 ".."由 SQL 编译器解释。当QUOTED_IDENTIFIER为 ON 则引号被视为括号( [...] )并可用于引用 SQL 对象名称,如表名、列名等。当它为 OFF 时(不推荐),则引号被视为撇号( '..' ) ) 并可用于在 SQL 命令中引用文本字符串。

ANSI_NULLS

此设置控制当您尝试使用除 IS 之外的任何比较运算符时会发生什么情况。在 NULL 上。当它为 ON 时,这些比较遵循标准,即与 NULL 比较总是失败(因为它不是一个值,它是一个标志)并返回 FALSE .当此设置为 OFF 时(实际上是 而不是 推荐)您可以成功地将其视为一个值并使用 = , <>等,并在适当的情况下返回 TRUE。

处理此问题的正确方法是改用 IS ( ColumnValue IS NULL .. )。

CONCAT_NULL_YIELDS_NULL

此设置控制字符串表达式中使用的 NULL 是否“传播”。当此设置为 ON 时,它遵循标准和表达式,如 'some string' + NULL ..总是返回 NULL。因此,在一系列字符串连接中,一个 NULL 可以导致整个表达式返回 NULL。关闭此选项(同样,不推荐)将导致 NULL 被视为空字符串,因此 'some string' + NULL只是评估为 'some string' .

处理这个问题的正确方法是使用 COALESCE(或 ISNULL)函数:'some string' + COALESCE(NULL, '') .. .

关于sql - ANSI_NULLS 和 QUOTED_IDENTIFIER 杀死了一些东西。它们是为了什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19168179/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com