http://bbs.csdn.net/topics/380103077
当 SET XACT_ABORT 为 ON 时,如果执行 Transact-SQL 语句产生运行时错误,则整个事务将终止并回滚。
当 SET XACT_ABORT 为 OFF 时,有时只回滚产生错误的 Transact-SQL 语句,而事务将继续进行处理。如果错误很严重,那么即使 SET XACT_ABORT 为 OFF,也可能回滚整个事务。OFF 是默认设置。
编译错误(如语法错误)不受 SET XACT_ABORT 的影响。
这里OFF是默认设置,换句话说一个存储过程如果开头不写SET XACT_ABORT ON 的话,这个里面如果有一句出错了,其他语句还是照样可以运行的,
那这样是不是违背了事务原理,事务不是原子性,一致性吗?,这样做还有什么意义呢?为什么默认不是ON ,因为用到事务的情况,肯定是希望事务内部语句起到 同生同灭的效果
SET XACT_ABORT ON时,在事务中,若出现错误,系统即默认回滚事务,但只对非自定义错误有效
SET XACT_ABORT OFF,默认值,在事务中,回滚一个语句还是整个事务视错误的严重程序而定,用户级错误一般不会回滚整个事务
备注
当 SET XACT_ABORT 为 ON 时,如果执行 Transact-SQL 语句产生运行时错误,则整个事务将终止并回滚。
当 SET XACT_ABORT 为 OFF 时,有时只回滚产生错误的 Transact-SQL 语句,而事务将继续进行处理。如果错误很严重,那么即使 SET XACT_ABORT 为 OFF,也可能回滚整个事务。
编译错误(如语法错误)不受 SET XACT_ABORT 的影响。
对于大多数 OLE DB 提供程序(包括 SQL Server),必须将隐式或显示事务中的数据修改语句中的 XACT_ABORT 设置为 ON。唯一不需要该选项的情况是在提供程序支持嵌套事务时。有关详细信息,请参阅分布式查询和分布式事务。
SET XACT_ABORT 的设置是在执行或运行时设置,而不是在分析时设置。
示例
下列代码示例导致在含有其他 Transact-SQL 语句的事务中发生外键冲突错误。在第一个语句集中产生错误,但其他语句均成功执行且事务成功提交。在第二个语句集中,将 SET XACT_ABORT 设置为 ON。这导致语句错误使批处理终止,并使事务回滚。
USE AdventureWorks;
GO
IF OBJECT_ID(N't2', N'U') IS NOT NULL
DROP TABLE t2;
GO
IF OBJECT_ID(N't1', N'U') IS NOT NULL
DROP TABLE t1;
GO
CREATE TABLE t1
(a INT NOT NULL PRIMARY KEY);
CREATE TABLE t2
(a INT NOT NULL 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 TRANSACTION;
INSERT INTO t2 VALUES (1);
INSERT INTO t2 VALUES (2); -- Foreign key error.
INSERT INTO t2 VALUES (3);
COMMIT TRANSACTION;
GO
SET XACT_ABORT ON;
GO
BEGIN TRANSACTION;
INSERT INTO t2 VALUES (4);
INSERT INTO t2 VALUES (5); -- Foreign key error.
INSERT INTO t2 VALUES (6);
COMMIT TRANSACTION;
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
语法
SET NOCOUNT { ON | OFF }
备注
当 SET NOCOUNT 为 ON 时,不返回计数(表示受 Transact-SQL 语句影响的行数)。当 SET NOCOUNT 为 OFF 时,返回计数。
即使当 SET NOCOUNT 为 ON 时,也更新 @@ROWCOUNT 函数。
当 SET NOCOUNT 为 ON 时,将不向客户端发送存储过程中每个语句的 DONE_IN_PROC 消息。使用由 SQL Server 2005 提供的实用工具执行查询时,其结果会防止在 Transact-SQL 语句(例如 SELECT、INSERT、UPDATE 和 DELETE)的末尾显示 nn rows affected。
如果存储过程中包含的一些语句并不返回许多实际数据,则该设置由于大量减少了网络流量,因此可显著提高性能。
SET NOCOUNT 设置是在执行或运行时设置,而不是在分析时设置。
权限
要求具有 public 角色的成员身份。
示例
以下示例将禁止显示受影响的行数的消息。
USE AdventureWorks;
GO
SET NOCOUNT OFF;
GO
-- Display the count message.
SELECT TOP(5)LastName
FROM Person.Contact
WHERE LastName LIKE 'A%';
GO
-- SET NOCOUNT to ON to no longer display the count message.
SET NOCOUNT ON;
GO
SELECT TOP(5) LastName
FROM Person.Contact
WHERE LastName LIKE 'A%';
GO
-- Reset SET NOCOUNT to OFF
SET NOCOUNT OFF;
GO
分享到:
相关推荐
SET XACT_ABORT { ON | OFF } 当 SET XACT_ABORT 为 ON 时,如果 Transact-SQL 语句产生运行时错误,整个事务将终止并回滚。为 OFF 时,只回滚产生错误的 Transact-SQL 语句,而事务将继续进行处理。编译错误(如...
但在本题中,使用了`SET XACT_ABORT ON`命令,这意味着如果在事务中发生错误,整个事务会被立即终止,并自动回滚,而不是只回滚到错误发生时的状态。因此,当`T4`中的插入操作因主键冲突失败时,由于`XACT_ABORT`...
1. **启用XACT_ABORT**:通过在事务开始前使用`SET XACT_ABORT ON`,可以确保在遇到错误时,整个事务会被回滚,而不是仅回滚出错的语句。这可以防止意外的后续操作。 ```sql SET XACT_ABORT ON; BEGIN TRAN UPDATE...
4. 在事务开始前加入 set xact_abort ON 语句 对于大多数 OLE DB 提供程序(包括 SQL Server),必须将隐式或显示事务中的数据修改语句中的 XACT_ABORT 设置为 ON。 知识点:XACT_ABORT 设置可以控制事务中的错误...
SET XACT_ABORT ON -- 开启事务异常处理 -- 调用链接服务器的代码 SET XACT_ABORT OFF -- 关闭事务异常处理 ``` 通过上述配置步骤,可以有效地解决不同服务器和不同数据库之间的数据互通问题,实现数据的有效...
代码如下: create procedure test_tran as set xact_abort on —–用@@error判断,对于严重的错误,系统根本就不会执行随后对@@error的判断,会直接终止执行。所以设置set xact_abort on 是必要的 BEGIN TRANSACTION...
先来看一个概念: 数据库事务(Database Transaction) ,是指作为... Set XACT_ABORT ON; --使用存储过程执行事务需要开启XACT_ABORT参数(默认为OFF) delete from table1 where name='' --删除数据sql1 begin tra
在开始事务的语句前添加`set xact_abort ON`,这可以确保在大多数OLE DB提供程序(包括SQL Server)中,即使发生错误,事务也会被回滚,避免数据不一致。 #### 5. MSDTC安全配置 在“组件服务”中,找到“我的电脑...
- `SET XACT_ABORT ON`:设置事务异常选项,如果事务中的任何语句失败,则整个事务将回滚。 3. **条件检查**: - `IF EXISTS (SELECT 1 FROM inserted) AND NOT EXISTS (SELECT 1 FROM deleted)`:检查是否有行被...
当设置`SET XACT_ABORT ON`时,如果在事务中的任何语句出现错误,SQL Server将自动回滚整个事务,并终止执行。这有助于避免因错误导致的部分事务提交。例如: ```sql SET XACT_ABORT ON; BEGIN TRAN UPDATE ...
- `SET XACT_ABORT ON/OFF`用于控制SQL错误时的事务处理方式。ON时,任何SQL错误会导致整个事务回滚;OFF时,仅回滚出错的SQL语句,其他语句仍继续执行。 4. **事务隔离级别**: - **READ UNCOMMITTED**:最低...
否则,如果在执行过程中遇到错误,由于`SET XACT_ABORT ON`设置,事务将被自动回滚,防止不完整或不一致的数据被写入目标表。 在实际应用中,这种跨库同步数据的方法可能会结合SQL Server代理作业定期执行,以实现...
SET XACT_ABORT ON; BEGIN TRANSACTION; UPDATE Category SET parent_id = @targetId WHERE id = @sourceId; COMMIT; END ``` **4. 获取节点的父节点:** ```sql CREATE PROCEDURE GetParentNode @nodeId...
SET XACT_ABORT ON; -- 打开try功能 BEGIN TRY BEGIN TRAN; INSERT INTO Sys_DocClass VALUES (); -- 数据表操作语句 COMMIT TRAN; -- 提交事务 PRINT 'Commited'; END TRY BEGIN CATCH ROLLBACK TRAN; -- 回滚...
6. **SET XACT_ABORT ON/OFF**:设置此选项可以控制当语句引发错误时事务的行为。默认情况下,ON会回滚整个事务,OFF则只影响引发错误的语句。 7. **事务隔离级别设置**:如`SET TRANSACTION ISOLATION LEVEL`命令...
SET XACT_ABORT ON选项可以开启事务的自动回滚,确保在发生错误时事务得到正确处理。 5. **公用表表达式(Common Table Expressions, CTE)**: CTE提供了一种创建临时结果集的方式,而无需使用临时表或视图。它们...
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 ...