存储过程中XACT_ABORT_NOCOUNT_ISOLATION的意思

作者: unvs 分类: Database 发布时间: 2011-11-09 10:50 ė12,466 views 61条评论

我们会常在存储过程中,加入以下三句话,但很多人不知道是什么意思,后面是解释:

SET NOCOUNT ON/OFF
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED/COMMITTED
SET XACT_ABORT ON/OFF

SET NOCOUNT ON/OFF:
当SET NOCOUNT为ON时,不返回计数(执行完后会返回SQL影响行数),此时将不会;当设置为OFF时,返回计数。
如果存储过程中包含的SQL语句并不返回许多实际的数据,可以将之设为ON,可以大量减少网络流量,而可显著提高性能。

SET XACT_ABORT ON/OFF:
当SET XACT_ABORT为ON时,如果执行Transact-SQL语句出错时,会立即停止执行,并回滚数据;
当设为OFF时,有时只回滚产生错误的SQL语句,而事物将继续处理,如果错误很严重,那么即使设置为OFF,也会回滚整个事务,OFF是默认设置。
编辑错误或语法错误,将不设XACT_ABORT的影响。

对于大多数 OLE DB 访问接口(包括 SQL Server),必须将隐式或显示事务中的数据修改语句中的 XACT_ABORT 设置为 ON。唯一不需要该选项的情况是在提供程序支持嵌套事务时。
SET XACT_ABORT 的设置是在执行或运行时设置,而不是在分析时设置。

SET TRANCACTION ISOLATION LEVEL READ:
此为设置一个事务的隔离级别,一次只能设置一个隔离级别选项,并且始终对那个连接有效,直到显示更改设置选项。
事务中执行的所有读取操作都会在指定的隔离级别的规则下运行,除非语句的 FROM 子句中的表提示为表指定了其他锁定行为或版本控制行为。

当属性设为UNCOMMITTED时,指定语句可以读取已有其他事务修改而未提交的行;设置此选项之后,可以读取未提交的修改,这种读取称为脏读。在事务结束之前,可以更改数据中的值,行也可以出现在数据集中或从数据集中消失。该选项的作用与在事务内所有 SELECT 语句中的所有表上设置 NOLOCK 相同。这是隔离级别中限制最少的级别。
当属性设为COMMITTED时,指定语句不能读取已有其他事务修改而未提交的行,这样可以避免脏读。其他事务可以在当前事务的各个语句之间更改数据,从而产生不可重复读取和幻像数据。该选项是 SQL Server 的默认设置。

本博文章基本上属于原创或收集整理,都是心血结晶。
欢迎转载分享,转载请注明出处,谢谢!
本文地址:存储过程中XACT_ABORT_NOCOUNT_ISOLATION的意思

一条评论

  1. wusx 2011 年 11 月 9 日 下午 7:33 回复

    你这个blog也是用sql server? 我考虑过 access sql 最后还是选择mysql

    cyheng 于 2011-11-10 18:04:29 回复

    这个是access 数据库,博客用可以了,你那个是wordpress博客,数据库肯定用mysql。。。

发表评论

电子邮件地址不会被公开。 必填项已用 * 标注

您可以使用这些 HTML 标签和属性: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

Ɣ回顶部