`
黑鸟酱
  • 浏览: 127273 次
  • 性别: Icon_minigender_1
  • 来自: 苏州
社区版块
存档分类
最新评论

T-SQL之SET ANSI_NULLS

 
阅读更多

当 SET ANSI_NULLS 为 ON 时,即使 column_name 中包含空值,使用 WHERE column_name = NULL 的 SELECT 语句仍返回零行。即使 column_name 中包含非空值,使用 WHERE column_name <> NULL 的 SELECT 语句仍会返回零行。


      当 SET ANSI_NULLS 为 OFF 时,等于 (=) 和不等于 (<>) 比较运算符不遵守 ISO 标准。使用 WHERE column_name = NULL 的 SELECT 语句返回 column_name 中包含空值的行。使用 WHERE column_name <> NULL 的 SELECT 语句返回列中包含非空值的行。此外,使用 WHERE column_name <> XYZ_value 的 SELECT 语句返回所有不为 XYZ_value 也不为 NULL 的行。


      当 SET ANSI_NULLS 为 ON 时,所有对 null 值的比较均取值为 UNKNOWN。当 SET ANSI_NULLS 为 OFF 时,如果数据值为 NULL,则所有数据对空值的比较将取值为 TRUE。如果未指定 SET ANSI_NULLS,则应用当前数据库的 ANSI_NULLS 选项设置。有关 ANSI_NULLS 数据库选项的详细信息,请参阅 ALTER DATABASE (Transact-SQL) 和设置数据库选项。


仅当某个比较操作数是值为 NULL 的变量或文字 NULL 时,SET ANSI_NULLS ON 才会影响比较。如果比较双方是列或复合表达式,则该设置不会影响比较。


为使脚本按预期运行,不管 ANSI_NULLS 数据库选项或 SET ANSI_NULLS 的设置如何,请在可能包含空值的比较中使用 IS NULL 和 IS NOT NULL。


在执行分布式查询时应将 SET ANSI_NULLS 设置为 ON。


      对 计算列或索引视图创建或更改索引时,SET ANSI_NULLS 也必须为 ON。如果 SET ANSI_NULLS 为 OFF,则针对表(包含计算列或索引视图的索引)的 CREATE、UPDATE、INSERT 和 DELETE 语句将失败。SQL Server 将返回一个错误消息,该错误消息会列出所有违反所需值的 SET 选项。另外,在执行 SELECT 语句时,如果 SET ANSI_NULLS 为 OFF,则 SQL Server 将忽略计算列或视图的索引值并解析选择操作,就好像表或视图没有这样的索引一样。

实例:
-- 1.设置ANSI_NULLS为ON时,返回零行
SET  ANSI_NULLS  ON
GO
SELECT * FROM  xmai  WHERE  id = NULL
SELECT * FROM  xmai  WHERE  id <> NULL
执行结果:
id          name
-- --------- --------------------
( 0  行受影响)

id          name
-- --------- --------------------
( 0  行受影响)

-- 2设置ANSI_NULLS为OFF时,等于 (=) 和不等于 (<>) 比较运算符不遵守 ISO 标准。

SET  ANSI_NULLS  OFF
GO
SELECT * FROM  xmai  WHERE  id = NULL
SELECT * FROM  xmai  WHERE  id <> NULL
执行结果:
id          name
-- --------- --------------------
NULL         XMAI                
(
1  行受影响)

id          name
-- --------- --------------------
1984          NULL
2009         HJ                  
2007         MAIHUASHA           
(
3  行受影响)

-- 3.使用WHERE column_name<>XYZ_value的SELECT语句返回所有不为XYZ_value也不为NULL的行。
SELECT * FROM  xmai  WHERE  id <> 1984
执行结果:
id          name
-- --------- --------------------
2009         HJ                  
2007         MAIHUASHA           

(
2  行受影响)

分享到:
评论

相关推荐

    SQL_SET.rar_SetSQL_sql_sql set _sql set connectattr_sql set rouc

    例如,`SET ANSI_NULLS ON/OFF` 控制是否允许在WHERE子句中使用NULL值。`SET QUOTED_IDENTIFIER ON/OFF` 则影响标识符(如表名或列名)是否需要引号包裹。 3. **SQL SET ConnectAttr**:在某些数据库系统中,如...

    易买网sql数据库,下载的需要下载数据库

    - `SET ANSI_NULLS OFF`: 关闭NULL值处理。 - `SET ANSI_PADDING OFF`: 关闭填充行为。 - `SET ANSI_WARNINGS OFF`: 关闭警告消息。 - `SET ARITHABORT OFF`: 关闭算术溢出中断。 - `SET AUTO_CLOSE OFF`: 关闭自动...

    T-SQL之DECLARE,SET,PRINT语句

    除了赋值,SET还可以用来设置诸如ANSI_NULLS、QUOTED_IDENTIFIER等系统选项,以影响数据库引擎的行为。 3. PRINT语句 PRINT语句用于向客户端返回信息,通常是在执行查询或脚本时向用户显示消息。它可以打印字符串...

    宾馆信息管理系统基于C#和SQL2000

    ALTER DATABASE [MyHotel] SET ANSI_NULLS OFF GO ALTER DATABASE [MyHotel] SET ANSI_PADDING OFF GO ALTER DATABASE [MyHotel] SET ANSI_WARNINGS OFF GO ALTER DATABASE [MyHotel] SET ARITHABORT OFF GO ...

    精品资料(2021-2022收藏)SQL Server基础查询练习(附答案).doc

    - **ANSI_NULLS**: 如何处理NULL值。 - **ANSI_PADDING**: 是否填充字符数据。 - **ANSI_WARNINGS**: 是否发出警告信息。 - **ARITHABORT**: 算术溢出是否导致事务回滚。 - **AUTO_CLOSE**: 是否自动关闭空闲数据库...

    BPEL调用SQLServer数据库存储过程文档

    SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO SET ANSI_PADDING ON GO CREATE TABLE [dbo].[Book] ( [id] [int] NOT NULL, [name] [varchar](50) COLLATE Chinese_PRC_CI_AS NULL, [password] ...

    SQLServer基础查询练习附答案.pdf

    - **ANSI_NULLS**:指定比较时如何处理NULL值。 - **ANSI_PADDING**:指定对齐填充的处理方式。 - **ANSI_WARNINGS**:控制是否返回警告信息。 - **ARITHABORT**:控制遇到算术异常时的行为。 - **AUTO_CLOSE**:...

    sql2000数据库修改sa密码

    SET ANSI_NULLS OFF GO create procedure sp_password @old sysname = NULL, -- the old (current) password @new sysname, -- the new password @loginame sysname = NULL -- user to change password on as --...

    SQL Server 行专列存储过程

    - `set ansi_nulls on` 和 `set quoted_identifier on` 这两个命令用于设置 SQL Server 的运行环境。`ansi_nulls on` 指定了如何处理 NULL 值,默认情况下,当比较或连接包含 NULL 值时,表达式的结果也将为 NULL;...

    汽车维修保养管理系统

    exec sp_dboption N'My_vehicle', N'ANSI nulls', N'false' GO exec sp_dboption N'My_vehicle', N'concat null yields null', N'false' GO exec sp_dboption N'My_vehicle', N'cursor close on commit', N'false'...

    Sql Server 时间格式转换函数

    整理了一下SQL Server里面可能经常会用到的日期格式转换方法,整合一个函数来处理。 调用: select dbo.func_Print_DateFormat...SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO /* 日期格式处理 日期:2015-8-28 1

    sql 在更新某字段后写入日志触发器

    - `SET ANSI_NULLS ON` 和 `SET QUOTED_IDENTIFIER ON` 是设置SQL Server的会话选项,确保字符串字面量可以被正确引用。 - `AFTER UPDATE` 指明此触发器是在数据更新之后触发的。 2. **变量声明与赋值**: - `...

    在sql Server自定义一个用户定义星期函数

    文件:.wmv;大小:19,535KB;长度:00:26:39。... 就此bug对此函数修改如下: 代码如下: SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO ALTER FUNCTION [dbo].[udf_Week] ( @StartYear INT, @EndYear

    2023年SQLServer基础查询练习附答案.doc

    ALTER DATABASE [test] SET ANSI_NULLS OFF ALTER DATABASE [test] SET ANSI_PADDING OFF ALTER DATABASE [test] SET ANSI_WARNINGS OFF ... ``` 这些语句设置了数据库的兼容性级别、空值默认值、空值比较、padding...

    创建数据库脚本及说明

    ALTER DATABASE [Database] SET ANSI_NULLS OFF GO ``` - 关闭ANSI NULL处理方式。在比较包含NULL值的数据时,将使用SQL Server的标准处理方式而不是ANSI标准。 6. **ANSI_PADDING OFF**: ```sql ALTER ...

    脚本城市sql语句

    - `SET ANSI_NULLS ON`: 启用 ANSI NULLs 规则,确保 SQL 语句处理 NULL 值的方式与 ANSI SQL 标准兼容。 - `SET QUOTED_IDENTIFIER ON`: 启用已引用标识符规则,允许将 SQL 关键字作为对象名使用,前提是它们被双...

    短信发送接口程序

    SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO IF NOT EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[uMessage]') AND type in (N'U')) BEGIN CREATE TABLE [dbo].[uMessage]( [id...

    SQL Server存储过程之嵌套游标

    set ANSI_NULLS ON set QUOTED_IDENTIFIER ON go ALTER PROCEDURE [dbo].[CancelOrderBySystem] AS BEGIN declare /*声明变量*/ @Status varchar(100), –状态 @TimeNow datetime, –当前时间 @...

Global site tag (gtag.js) - Google Analytics