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中的数据访问 三

sqlserver中的两个表如何实现同时更新?(详见问题说明)

C#_批量插入数据到Sqlserver中的四种方式