`
黑鸟酱
  • 浏览: 123638 次
  • 性别: 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  行受影响)

分享到:
评论

相关推荐

    关于水晶报表9中对图片的处理

    SET QUOTED_IDENTIFIER ON GOSET ANSI_NULLS ON GOALTER proc sp_nrc_pattern_body /*this procedure is ...set @sql=‘drop table #nrc_pattern_tmp‘ exec(@sql)GOSET QUOTED_IDENTIFIER OFF GOSET ANSI_NULLS ON GO

    宾馆信息管理系统基于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 ...

    SQL Server 行专列存储过程

    set ansi_nulls on go set quoted_identifier on go -- ============================================= -- author: -- create date: &lt;2011-06-16 13:30&gt; -- description: ,,&gt; -- ===============================...

    汽车维修保养管理系统

    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语句直接把表导出为XML格式

    首先建立一张表: 代码如下: USE [ip] GO /****** 对象: Table [dbo].[SiteData] 脚本日期: 09/11/2010 17:41:11 ******/ SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO SET ANSI_PADDING ON GO CREATE TABLE ...

    预约系统(一)数据库设计.pdf

    Object: Table [dbo].[T_userInfo] Script Date: 07/13/2017 08:38:16 ******/ 4 SET ANSI_NULLS ON 5 GO 6 SET QUOTED_IDENTIFIER ON 7 GO 8 CREATE TABLE [dbo].[T_userInfo]( 9 [id] [int] IDENTITY(1,1) NOT ...

    在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

    短信发送接口程序

    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 判断给定日期值(或时间段)所在星期的星期一和星期天的日期

    一、给定一个日期值,求出此日期所在星期的星期一和星期天的日期数据 例如给定一个日期 2010-09-01,求出它所在星期的星期一是2010-08-30,星期天是2010-09-05 Function创建如下: 代码如下: USE [MSSQL] GO SET ANSI_...

    SQL Server存储过程之嵌套游标

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

    SqlServer 2000、2005分页存储过程整理第1/3页

    sql server 2005的分页存储过程分3个版本,一个是没有优化过的,一个是优化过的,最后一...SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO CREATE proc [dbo].[up_Page2005] @TableName varchar(50), --表名 @Fi

    sql 触发器使用例子

    inserted,deleted是在触发器中使用的两个临时表... 代码如下:set ANSI_NULLS ON set QUOTED_IDENTIFIER ON go ALTER TRIGGER [dnt_user_add] ON [dbo].[dnt_users] AFTER INSERT AS BEGIN SET NOCOUNT ON; insert into

    实现SQL分页的存储过程代码

    SQL分页的存储过程代码,需要的朋友们直接拿去用,使用...SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO ALTER PROC [dbo].[pages] ( @tbname nvarchar(100), --要分页显示的表名 @FieldKey nvarchar(1000), --

    SQLSERVER Pager store procedure分页存储过程

    代码如下:SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO CREATE PROCEDURE [dbo].[Pagination] @Page int = 1, — 当前页码 @PageSize int = 10, — 每页记录条数(页面大小) @Table nvarchar(500), — 表名或...

    sqlserver 快速生成汉字的首拼字母的函数(经典)

    代码如下: 代码如下: USE [tempdb] GO /****** Object: UserDefinedFunction [dbo].[fun_getPY] Script Date: 05/23/2012 18:03:45 ******/ SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO /* 获取汉字的首拼音...

    SQL SERVER备份数据库存储过程的方法

    sqlserver批量导出存储过程 在查询分析器中,选中数据库——》右键“任务”——》在...set ANSI_NULLS ON set QUOTED_IDENTIFIER ON go ALTER PROCEDURE [dbo].[dbBak] AS BEGIN DECLARE @sqlCommand NVARCHAR(1000)

    查看SQL-SERVER数据库及各个表的数据量及占用空间大小

    1、查看某个数据库,... SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO -- ============================================= -- 说明:更新查询数据库中各表的大小,结果存储到数据表中 -- ====================

    正解SQLSEVER 2005 sql排序(按大小排序)

    代码如下: SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO ALTER FUNCTION [dbo].[udf_OrderLimitSize] ( @Ov NVARCHAR(30) ) RETURNS decimal(18,6) AS BEGIN –如果长度少于等于2的数值为返回NULL IF (LEN(@...

    SqlServer实现类似Oracle的before触发器示例

    SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO -- ============================================= -- Author: -- Create date: -- Description: -- ============================================= alter ...

Global site tag (gtag.js) - Google Analytics