gpt4 book ai didi

sql-server - ansi_nulls : some ways to check it don't seem to work

转载 作者:行者123 更新时间:2023-12-04 10:04:00 29 4
gpt4 key购买 nike

documentation指出数据库 ANSI_NULLS 标志控制在某些方面与 null 进行比较的行为。
我在查 this stack overflow post检查如何确定(未设置)此标志的值。有趣的是,并非所有答案似乎都适合我。
我的测试查询:

create table x(id int,txt nvarchar(max))
insert x(id,txt) values (1,'not null here'),(2,null)
select * from x

--query 1
select * from x where txt=null

--query 2
select * from x where txt<>null
返回的输出是两个空的结果集。由此,我可以从逻辑上推断出 ANSI_NULLS 在我的数据库中是 ON 的。
现在,到检查选项:
1 select databasepropertyex('MyDatabaseName', 'IsAnsiNullsEnabled')返回 0。我没想到会这样。
2
DECLARE @options INT
SELECT @options = @@OPTIONS
IF ( (32 & @options) = 32 ) PRINT 'ANSI_NULLS'
打印“ANSI_NULLS”。预期的。
3 SELECT is_ansi_nulls_on FROM sys.databases WHERE name = 'MyDatabaseName'返回 0。我没想到会这样。
4 dbcc useroptions结果集包括带有 [Set Option]='ansi_nulls' 和 [Value]='Set' 的行。预期的。

为什么选项 1 和 3 给我这个结果?
我的@@version 是:
Microsoft SQL Server 2017 (RTM-GDR) (KB4505224) - 14.0.2027.2 (X64) 
Jun 15 2019 00:26:19
Copyright (C) 2017 Microsoft Corporation
Developer Edition (64-bit) on Windows Server 2019 Standard 10.0 <X64> (Build 17763: ) (Hypervisor)

最佳答案

您的查询正在查看两个不同的内容。

一个是数据库默认值(可以用 ALTER DATABASE SET 更改)——另一个是它在当前 session 中的设置。

数据库默认值几乎没用,因为所有 common连接到 SQL Server 集的方式 ANSI_NULLSas described below

Connection-level settings that are set by using the SET statement override the default database setting for ANSI_NULLS. ODBC and OLE DB clients issue a connection-level SET statement setting ANSI_NULLS to ON for the session, by default. The clients run the statement when you connect to an instance of SQL Server. For more information, see SET ANSI_NULLS.

关于sql-server - ansi_nulls : some ways to check it don't seem to work,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61681256/

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