-- use accmain
-- 删除表和过程
/**
drop table gk_testa
drop table gk_testb
drop procedure sql_pro
**/
-- 创建表
/**
CREATE TABLE gk_testa(
id int identity(1,1) PRIMARY KEY,
username Varchar(200),
password Varchar(200)
)
CREATE TABLE gk_testb(
id int identity(1,1) PRIMARY KEY,
username Varchar(200),
password int
)
**/
-- 删除数据
/**
delete from gk_testa
delete from gk_testb
**/
-- 1、 总体作为一个事务,整体提交或整体回滚,格式为:
create procedure sql_pro AS
SET XACT_ABORT ON
begin TRAN
insert into gk_testa(username,password)values('jack','123qwe');
insert into gk_testb(username,password)values('jack','123qwe');
COMMIT TRAN
-- 2、 每个语句作为一个事务,事务在错误行终止,错误行回滚,错误行之前的不回滚,格式为:
create procedure sql_pro AS
SET XACT_ABORT ON
begin
insert into gk_testa(username,password)values('jack','123qwe');
insert into gk_testb(username,password)values('jack','123qwe');
end
-- 3、带参数的存储过程(总体作为一个事务,整体提交或整体回滚),格式为:
create procedure sql_pro (@usernamea Varchar(200), @passworda Varchar(200),@usernameb Varchar(200), @passwordb int)
AS
SET XACT_ABORT ON
begin TRAN
insert into gk_testa(username,password)values(@usernamea,@passworda);
insert into gk_testb(username,password)values(@usernameb,@passwordb);
COMMIT TRAN
-- 执行过程(无参数)
exec sql_pro;
-- 执行过程(有参数)
exec sql_pro 'aname','apassword','bname',222;
-- 查询数据
select * from gk_testa
select * from gk_testb
================== 上面是sql Server 数据库测写法。
===================下面是参考的例子(各种数据库应该都支持吧)。
SET XACT_ABORT各种用法及显示结果
默认行为
默认为SET XACT_ABORT OFF,没有事务行为。
SET XACT_ABORT ON
SET XACT_ABORT ON分为两种:
1、总体作为一个事务,整体提交或整体回滚,格式为:
SET XACT_ABORT ON
BEGIN TRAN
--要执行的语句
COMMIT TRAN
GO
2、每个语句作为一个事务,事务在错误行终止,错误行回滚,错误行之前的不回滚,格式为:
SET XACT_ABORT ON
BEGIN
--要执行的语句
END
GO
测试
复制代码
--创建测试表
use MyDB
CREATE TABLE student
(
stuid int NOT NULL PRIMARY KEY,
stuname varchar(50)
)
CREATE TABLE score
(
stuid int NOT NULL REFERENCES student(stuid),
score int
)
GO
--插入测试数据
INSERT INTO student VALUES (101,'zhangsan')
INSERT INTO student VALUES (102,'wangwu')
INSERT INTO student VALUES (103,'lishi')
INSERT INTO student VALUES (104,'maliu')
GO
---------------测试事务提交------------------
use MyDB
--只回滚错误行,语句还继续执行
SET XACT_ABORT OFF
BEGIN TRAN
INSERT INTO score VALUES (101,90)
INSERT INTO score VALUES (102,78)
INSERT INTO score VALUES (107,76) /* Foreign Key Error */
INSERT INTO score VALUES (103,81)
INSERT INTO score VALUES (104,65)
COMMIT TRAN
GO
/*
stuid score
----------- -----------
101 90
102 78
103 81
104 65
(4 row(s) affected)
*/
use MyDB
--事务终止并全部回滚
SET XACT_ABORT ON
BEGIN TRAN
INSERT INTO score VALUES (101,90)
INSERT INTO score VALUES (102,78)
INSERT INTO score VALUES (107,76) /* Foreign Key Error */
INSERT INTO score VALUES (103,81)
INSERT INTO score VALUES (104,65)
COMMIT TRAN
GO
/*
stuid score
----------- -----------
(0 row(s) affected)
*/
use MyDB
--事务在错误行终止,错误行回滚,错误行之前的不回滚
SET XACT_ABORT ON
BEGIN
INSERT INTO score VALUES (101,90)
INSERT INTO score VALUES (102,78)
INSERT INTO score VALUES (107,76) /* Foreign Key Error */
INSERT INTO score VALUES (103,81)
INSERT INTO score VALUES (104,65)
END
GO
/*
stuid score
----------- -----------
101 90
102 78
(2 row(s) affected)
*/
来源:http://www.cnblogs.com/rob0121/articles/2320932.html
分享到:
相关推荐
当 SET XACT_ABORT 为 ON 时,如果 Transact-SQL 语句产生运行时错误,整个事务将终止并回滚。为 OFF 时,只回滚产生错误的 Transact-SQL 语句,而事务将继续进行处理。编译错误(如语法错误)不受 SET XACT_...
1. **启用XACT_ABORT**:通过在事务开始前使用`SET XACT_ABORT ON`,可以确保在遇到错误时,整个事务会被回滚,而不是仅回滚出错的语句。这可以防止意外的后续操作。 ```sql SET XACT_ABORT ON; BEGIN TRAN UPDATE...
总结来说,SQL2000中的事务回滚问题关键在于理解和有效利用`SET XACT_ABORT`选项来控制错误处理策略,以及在错误发生时及时回滚事务并提供适当的错误反馈。在编写涉及事务处理的存储过程或脚本时,确保正确处理错误...
在数据库管理中,存储过程(Stored Procedure)是一种预编译的SQL代码集合,它封装了特定的功能,并且可以在需要时通过调用其名称来执行。存储过程是数据库系统中的一个重要特性,尤其对于复杂的业务逻辑处理和提高...
但在本题中,使用了`SET XACT_ABORT ON`命令,这意味着如果在事务中发生错误,整个事务会被立即终止,并自动回滚,而不是只回滚到错误发生时的状态。因此,当`T4`中的插入操作因主键冲突失败时,由于`XACT_ABORT`...
否则,如果在执行过程中遇到错误,由于`SET XACT_ABORT ON`设置,事务将被自动回滚,防止不完整或不一致的数据被写入目标表。 在实际应用中,这种跨库同步数据的方法可能会结合SQL Server代理作业定期执行,以实现...
当设置`SET XACT_ABORT ON`时,如果在事务中的任何语句出现错误,SQL Server将自动回滚整个事务,并终止执行。这有助于避免因错误导致的部分事务提交。例如: ```sql SET XACT_ABORT ON; BEGIN TRAN UPDATE ...
在SQL Server中,存储过程是预编译的SQL语句集合,它们封装在一起,以便重复使用和方便管理。而事务则是数据库操作的基本单位,用于确保一组数据库操作要么全部成功,要么全部失败,以维护数据的一致性和完整性。当...
在这个存储过程中,`BEGIN TRAN`启动了一个新的事务,`SET XACT_ABORT ON`设置了一个选项,使得一旦发生任何错误,事务将自动回滚,避免了脏数据的产生。接着,尝试插入新用户数据到USER表中。如果`@@error`返回值不...
在存储过程中使用事务,可以提供高级别的数据保护,确保在处理大量或复杂的数据更改时,即使出现错误也能保持数据的正确状态。 首先,让我们深入理解存储过程中的事务管理。存储过程是预编译的SQL代码集合,可作为...
`SET XACT_ABORT`是一个非常有用的设置,它决定了当Transact-SQL语句遇到运行时错误时,是否自动回滚整个事务。如果设置为ON,任何错误都会导致事务回滚,这对于确保数据一致性非常有用,特别是在存储过程中。 例如...
在开始事务的语句前添加`set xact_abort ON`,这可以确保在大多数OLE DB提供程序(包括SQL Server)中,即使发生错误,事务也会被回滚,避免数据不一致。 #### 5. MSDTC安全配置 在“组件服务”中,找到“我的电脑...
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`:设置事务异常选项,如果事务中的任何语句失败,则整个事务将回滚。 3. **条件检查**: - `IF EXISTS (SELECT 1 FROM inserted) AND NOT EXISTS (SELECT 1 FROM deleted)`:检查是否有行被...
但通过设置`SET XACT_ABORT ON`,可以确保任何错误都会导致整个事务回滚。 2. **事务处理与批处理的区别**:事务处理关注的是操作的一致性,而批处理则是一次执行多个SQL语句。在批处理中,即使有语句失败,其他成功...
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 可更新的...