sqlserver中的(NOCOUNT/ANSI_NULLS)选项
Posted 小志1236
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了sqlserver中的(NOCOUNT/ANSI_NULLS)选项相关的知识,希望对你有一定的参考价值。
1 NOCOUNT选项
当 SET NOCOUNT 为 ON 时,不返回计数。
当 SET NOCOUNT 为 OFF 时,返回计数。
eg:
if object_id(N\'table_test\',N\'U\') IS not null drop table table_test go CREATE TABLE table_test(id INT,name VARCHAR(50)) go INSERT INTO table_test VALUES(1,\'xiaoming\'),(2,null) go SET NOCOUNT ON SELECT * FROM table_test GO
SET NOCOUNT OFF
SELECT * FROM table_test
GO
2 ANSI_NULLS 选项
SQL92 ANSI/ISO(简称SQL-92)标准要求对空值(NULL)的等于 (=) 或不等于 (<>) 比较取值都为 FALSE。
当 SET ANSI_NULLS 为 ON 时,表示SQL语句遵循SQL-92标准。
字段(column_name) 中包含空值,使用 WHERE column_name = NULL 的 SELECT 语句仍返回零行。
当 SET ANSI_NULLS 为 OFF 时,表示不遵从 SQL-92 标准。
使用 WHERE column_name = NULL 的 SELECT 语句返回 column_name 中包含空值的行。
eg:
SET ANSI_NULLS ON
SELECT TOP 100 * FROM table_test WHERE name = NULL
GO
SET ANSI_NULLS OFF
SELECT TOP 100 * FROM table_test WHERE name = NULL
GO
3 QUOTED_IDENTIFIER选项(引用标识符)
数据库对象的名称即为其标识符。Microsoft SQL Server 中的所有内容都可以有标识符。服务器、数据库和数据库对象(例如表、视图、列、索引、触发器、过程、约束及规则等)都可以有标识符。
当 SET QUOTED_IDENTIFIER 为 ON 时,
标识符可以由双引号或者”[ ]”分隔,而文字必须由单引号分隔。
当 SET QUOTED_IDENTIFIER 为 OFF 时,
标识符不可加引号,且必须符合所有 Transact-SQL (微软对SQL的扩展)标识符规则。
SET QUOTED_IDENTIFIER OFF GO CREATE TABLE "select" ("identity" INT IDENTITY NOT NULL, "order" INT NOT NULL); GO
SET QUOTED_IDENTIFIER ON; GO CREATE TABLE "select" ("identity" INT IDENTITY NOT NULL, "order" INT NOT NULL); GO SELECT "identity","order" FROM "select" ORDER BY "order"; GO
DROP TABLE "SELECT"; GO SET QUOTED_IDENTIFIER OFF; GO
4 XACT_ABORT选项
指定当 Transact-SQL 语句出现运行时错误时,SQL Server 是否自动回滚到当前事务。
当 SET XACT_ABORT 为 ON 时,如果执行 Transact-SQL 语句产生运行时错误,则整个事务将终止并回滚。
当 SET XACT_ABORT 为 OFF 时,有时只回滚产生错误的 Transact-SQL 语句,而事务将继续进行处理。如果错误很严重,那么即使 SET XACT_ABORT 为 OFF,也可能回滚整个事务。OFF 是默认设置。
IF OBJECT_ID(N\'demo\',N\'U\') IS NOT NULL DROP TABLE demo create table demo(id int not null) go --set xact_abort on begin tran insert into demo values (1) insert into demo values (null) insert into demo values (2) commit tran go --set xact_abort off Select * from demo
以上是关于sqlserver中的(NOCOUNT/ANSI_NULLS)选项的主要内容,如果未能解决你的问题,请参考以下文章
(转)SQLServer_十步优化SQL Server中的数据访问五
(转)SQLServer_十步优化SQL Server中的数据访问 二
(转)SQLServer_十步优化SQL Server中的数据访问一
(转)SQLServer_十步优化SQL Server中的数据访问 三