`
Felix韩
  • 浏览: 17138 次
  • 性别: Icon_minigender_1
  • 来自: 江西
最近访客 更多访客>>
社区版块
存档分类
最新评论

网上看到的SET XACT_ABORT的用法~

    博客分类:
  • SQL
阅读更多

指定当 Transact-SQL 语句产生运行时错误时,Microsoft® SQL Server™ 是否自动回滚当前事务。

语法
SET XACT_ABORT { ON | OFF }

注释
当 SET XACT_ABORT 为 ON 时,如果 Transact-SQL 语句产生运行时错误,整个事务将终止并回滚。为 OFF 时,只回滚产生错误的 Transact-SQL 语句,而事务将继续进行处理。编译错误(如语法错误)不受 SET XACT_ABORT 的影响。

对于大多数 OLE DB 提供程序(包括 SQL Server),隐性或显式事务中的数据修改语句必须将 XACT_ABORT 设置为 ON。唯一不需要该选项的情况是提供程序支持嵌套事务时。有关更多信息,请参见分布式查询和分布式事务。

SET XACT_ABORT 的设置是在执行或运行时设置,而不是在分析时设置。

示例
下例导致在含有其它 Transact-SQL 语句的事务中发生违反外键错误。在第一个语句集中产生错误,但其它语句均成功执行且事务成功提交。在第二个语句集中,SET XACT_ABORT 设置为 ON。这导致语句错误使批处理终止,并使事务回滚。

 

CREATE TABLE t1 (a int PRIMARY KEY)
CREATE TABLE t2 (a int REFERENCES t1(a))
GO
INSERT INTO t1 VALUES (1)
INSERT INTO t1 VALUES (3)
INSERT INTO t1 VALUES (4)
INSERT INTO t1 VALUES (6)
GO
SET XACT_ABORT OFF
GO
BEGIN TRAN
INSERT INTO t2 VALUES (1)
INSERT INTO t2 VALUES (2/* Foreign key error */
INSERT INTO t2 VALUES (3)
COMMIT TRAN
GO

SET XACT_ABORT ON
GO

BEGIN TRAN
INSERT INTO t2 VALUES (4)
INSERT INTO t2 VALUES (5/* Foreign key error */
INSERT INTO t2 VALUES (6)
COMMIT TRAN
GO

/* Select shows only keys 1 and 3 added. 
   Key 2 insert failed and was rolled back, but
   XACT_ABORT was OFF and rest of transaction
   succeeded.
   Key 5 insert error with XACT_ABORT ON caused
   all of the second transaction to roll back. 

*/


SELECT * 
FROM t2
GO

DROP TABLE t2
DROP TABLE t1
GO

分享到:
评论

相关推荐

    在存储过程中编写正确的事务处理代码(SQL_Server_2000_.doc

    1. **启用XACT_ABORT**:通过在事务开始前使用`SET XACT_ABORT ON`,可以确保在遇到错误时,整个事务会被回滚,而不是仅回滚出错的语句。这可以防止意外的后续操作。 ```sql SET XACT_ABORT ON; BEGIN TRAN UPDATE...

    SQL Server存储过程中编写事务处理的方法小结

    1. 使用`SET XACT_ABORT ON`: 当设置`SET XACT_ABORT ON`时,如果在事务中的任何语句出现错误,SQL Server将自动回滚整个事务,并终止执行。这有助于避免因错误导致的部分事务提交。例如: ```sql SET XACT_...

    SQL SERVER 2005 新增的几个小功能

    SET XACT_ABORT ON; -- 打开try功能 BEGIN TRY BEGIN TRAN; INSERT INTO Sys_DocClass VALUES (); -- 数据表操作语句 COMMIT TRAN; -- 提交事务 PRINT 'Commited'; END TRY BEGIN CATCH ROLLBACK TRAN; -- 回滚...

    SQLServer分布式事务问题

    4. **在事务开始前加入set xact_abort ON语句** - 对于大多数OLEDB提供程序(包括SQLServer),必须将隐式或显式事务中的数据修改语句中的XACT_ABORT设置为ON。这样可以确保一旦事务中的任意部分失败,则整个事务...

    SQL Server 跨库同步数据

    否则,如果在执行过程中遇到错误,由于`SET XACT_ABORT ON`设置,事务将被自动回滚,防止不完整或不一致的数据被写入目标表。 在实际应用中,这种跨库同步数据的方法可能会结合SQL Server代理作业定期执行,以实现...

    在SQL Server 2005中解决死锁问题

    SET XACT_ABORT ON; DECLARE @r INT; SET @r = 1; WHILE @r BEGIN BEGIN TRAN; BEGIN TRY INSERT INTO Orders (CustomerId) VALUES (@#ALFKI@#); WAITFOR DELAY '00:00:05'; SELECT * FROM Orders WHERE ...

    SQL Server中解决死锁的新方法介绍

    SET XACT_ABORT ON declare @r int set @r = 1 while @r begin begin tran begin try insert into Orders(CustomerId) values(@#ALFKI@#) waitfor delay @#00:00:05@# select * from Orders where CustomerId ...

    存储过程的几个小例子

    SET XACT_ABORT ON; -- 强制终止事务,防止脏读 BEGIN TRY BEGIN TRANSACTION; -- 插入新数据 INSERT INTO Table1 (id, data) VALUES (@id, @newData); -- 更新其他数据 UPDATE Table2 SET column = '...

    将DataTable作为存储过程参数的用法实例详解

    SET XACT_ABORT ON BEGIN TRANSACTION INSERT INTO dbo.Users(UserName, UserPass, Sex, Age) SELECT UserName, UserPass, Sex, Age FROM @User COMMIT TRANSACTION SET XACT_ABORT OFF GO ``` 3. **C#代码实现** ...

    实现+Oracle+连接+SQL+Server

    - 在执行插入、删除、更新等操作时,需设置 `SET XACT_ABORT ON`,以确保事务的一致性和完整性。 - 查询示例:`SELECT * FROM OPENQUERY(ORA_DBENSIS, 'SELECT ID FROM TEST_TRANS')` 或者 `SELECT * FROM ORA_...

    SQL Server2005 DBLINK链接Oracle 9i详解

    - 对于大多数 OLEDB 提供程序,包括 SQL Server,在事务中需要设置 XACT_ABORT 为 ON。 - 这样可以确保事务的一致性和完整性。 5. **MSDTC 安全配置**: - 在“组件服务”的 MSDTC 配置中,启用网络 DTC 访问。 ...

    MS-SQL Server杂志-事务全攻略

    - **SET XACT_ABORT ON/OFF**:确定是否在发生错误时自动回滚当前事务。 ##### 事务嵌套的例子 假设需要在一个事务中执行多个步骤,并且希望这些步骤作为一个整体成功或失败,则可以使用嵌套事务。例如: ```sql ...

    动态SQL中返回数值的实现代码

    - `set xact_abort on`开启强事务控制,一旦发生错误,整个事务将被回滚。 - `BEGIN TRANSACTION`和`COMMIT TRANSACTION`用于开始和结束一个事务,确保所有操作要么全部成功,要么全部失败。 5. **输出值**: - ...

    sql2000 Log Explorer4.2(含注册码)+汉化

    ABORT_XACT 回滚一个事务 MARK_SAVEPOINT 程序发布'SAVE TRANSACTION'命令 MARK_DLL 表结构被修改 BEGIN_CKPT 启动一个检查点 XACT_CKPT 在执行检查点时打开事务 END_CKPT 执行完检查点 SORT_BEGIN 创建索引时...

    sqlserver2000基础(高手也有用)

    15.4.4 XACT_ABORT与RAISERROR的疑难解答 477 15.5 游标处理疑难解答 479 15.5.1 全局游标与本地游标 479 15.5.2 检查指定的游标是否存在 480 15.5.3 事务提交或者回滚对游标的影响 482 15.5.4 可更新的...

    SQL SERVER 2000开发与管理应用实例

    15.4.4 XACT_ABORT与RAISERROR的疑难解答 477 15.5 游标处理疑难解答 479 15.5.1 全局游标与本地游标 479 15.5.2 检查指定的游标是否存在 480 15.5.3 事务提交或者回滚对游标的影响 482 15.5.4 可...

Global site tag (gtag.js) - Google Analytics