在通过sql server2005/2008创建存储过程的文件时,在文件的开头部分会默认出现下面这几行代码:
USE [Test] GO SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GOUSE:指明整个存储过程所调用/使用的数据库,其中Test是我本地建立的数据库名称,USE [Test]就是告诉程序,要调用/使用的是我本地的Test数据库的意思。必须要指明调用/使用的具体数据库。
GO:该语句不是SQL的语句,表示一个事务结束的标识,告诉程序在go语句之前的所有语句已经确认并提交了,可以进行批处理操作了。当程序运行到go语句时,就会直接对go语句之前的代码进行批处理操作了。
SET ANSI_NULLS ON:表示对空值(null)对等于(=)或不等于(<>)进行判断时,遵从 SQL-92 规则。
SQL-92规则中,在对空值(null)进行等于(=)或不等于(<>)比较时,取值为false。也就是说:
①即使是表中字段column_name中包含空值(null),在进行条件判断 where column_name = NULL 时,该select查询语句返回的数据是空的/返回零行。
②即使是表中字段column_name中包含非空值,在进行条件判断 where column_name <> NULL时,该select查询语句返回的数据是空的/返回零行。
也就是说,当设置SET ANSI_NULLS ON时
select * from a where name = null或
select * from a where name <> null得到的结果都是空的
SET ANSI_NULLS OFF:表示在对空值(null)进行等于(=)或不等于(<>)比较时,不再遵从SQL-92的规则。即,①当column_name字段中包含了空值(null),在进行条件判断 where column_name = null 时,该select查询语句会返回表中column_name 字段值为空(null)的数据行。
②当column_name字段中包含了非空值,在进行条件判断 where column_name <> null 时,该select 查询语句会返回表中column_name 字段值不为空的数据行。
也就是说,当设置SET ANSI_NULLS OFF时
select * from a where name = null返回的结果是name为NULL的内容
select * from a where name <> null返回的结果是name不为NULL的内容
SET QUOTED_IDENTIFIER ON:表示使用引用标识符,标识符可以用双引号分隔,但是文字必须用单引号分隔。 即 select "name","age","sex","grade" from a where name = '张三'与
select name,age,sex,grade from a where name = '张三'两者返回的结果是一样的,此时name,age,sex,grade都是字段名,而非文本。
说明:当设置为ON时,标识符(数据表字段 name)等字段可以用双引号分隔,也可以不用双引号分隔,但是文字部分必须用单引号来分隔,否则会报错。
注意:当设置为ON时,标识符返回的是该字段的值,name,返回的是姓名为张三,age字符返回的是年龄为25,sex字符返回的是性别为男,grade字符返回的是分数为400
SET QUOTED_IDENTIFIER OFF:表示标识符不能用双引号分隔,否则标识符会被当做字符串值来返回,不再是字符来返回。 而且,文字部分必须用单引号或双引号分隔。 即 select "name","age","sex","grade" from a where name = '张三'返回的结果是
(无列名)(无列名)(无列名)(无列名)nameagesexgrade而
select name,age,sex,grade from a where name = '张三'返回的结果才是正确的。
说明:当设置为OFF时,标识符是不能用双引号来分隔的,否则标识符就会被当做是字符串来返回,不再是字符来返回了。而且,文字部分是必须要引号来分隔,可以是单引号(’’),也可以是双引号("")。