指定当 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
分享到:
相关推荐
1. **启用XACT_ABORT**:通过在事务开始前使用`SET XACT_ABORT ON`,可以确保在遇到错误时,整个事务会被回滚,而不是仅回滚出错的语句。这可以防止意外的后续操作。 ```sql SET XACT_ABORT ON; BEGIN TRAN UPDATE...
1. 使用`SET XACT_ABORT ON`: 当设置`SET XACT_ABORT ON`时,如果在事务中的任何语句出现错误,SQL Server将自动回滚整个事务,并终止执行。这有助于避免因错误导致的部分事务提交。例如: ```sql SET XACT_...
SET XACT_ABORT ON; -- 打开try功能 BEGIN TRY BEGIN TRAN; INSERT INTO Sys_DocClass VALUES (); -- 数据表操作语句 COMMIT TRAN; -- 提交事务 PRINT 'Commited'; END TRY BEGIN CATCH ROLLBACK TRAN; -- 回滚...
4. **在事务开始前加入set xact_abort ON语句** - 对于大多数OLEDB提供程序(包括SQLServer),必须将隐式或显式事务中的数据修改语句中的XACT_ABORT设置为ON。这样可以确保一旦事务中的任意部分失败,则整个事务...
否则,如果在执行过程中遇到错误,由于`SET XACT_ABORT ON`设置,事务将被自动回滚,防止不完整或不一致的数据被写入目标表。 在实际应用中,这种跨库同步数据的方法可能会结合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 ...
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 = '...
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#代码实现** ...
- 在执行插入、删除、更新等操作时,需设置 `SET XACT_ABORT ON`,以确保事务的一致性和完整性。 - 查询示例:`SELECT * FROM OPENQUERY(ORA_DBENSIS, 'SELECT ID FROM TEST_TRANS')` 或者 `SELECT * FROM ORA_...
- 对于大多数 OLEDB 提供程序,包括 SQL Server,在事务中需要设置 XACT_ABORT 为 ON。 - 这样可以确保事务的一致性和完整性。 5. **MSDTC 安全配置**: - 在“组件服务”的 MSDTC 配置中,启用网络 DTC 访问。 ...
- **SET XACT_ABORT ON/OFF**:确定是否在发生错误时自动回滚当前事务。 ##### 事务嵌套的例子 假设需要在一个事务中执行多个步骤,并且希望这些步骤作为一个整体成功或失败,则可以使用嵌套事务。例如: ```sql ...
- `set xact_abort on`开启强事务控制,一旦发生错误,整个事务将被回滚。 - `BEGIN TRANSACTION`和`COMMIT TRANSACTION`用于开始和结束一个事务,确保所有操作要么全部成功,要么全部失败。 5. **输出值**: - ...
ABORT_XACT 回滚一个事务 MARK_SAVEPOINT 程序发布'SAVE TRANSACTION'命令 MARK_DLL 表结构被修改 BEGIN_CKPT 启动一个检查点 XACT_CKPT 在执行检查点时打开事务 END_CKPT 执行完检查点 SORT_BEGIN 创建索引时...
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 可更新的...
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 可...