Sql server 事务回滚

本文详细介绍了SQL数据库操作,包括创建、删除数据库,表结构设计,数据插入及事务管理流程,通过实例演示确保数据操作的可靠性和一致性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


if exists (select * from sys.databases where name='TestDB')
drop database TestDB;
create database TestDB;

use TestDB;

if OBJECT_ID('department','U') is not null
drop table department
create table department
(
id int primary key identity(1,1),
name varchar(20) not null,
num varchar(50) not null
)


if OBJECT_ID('employee','U') is not null
drop table employee;
create table employee
(
id int primary key identity(1,1) ,
name nvarchar(30) not null,
departmentId int foreign key references department(id) not null
)

insert into employee(name)values('zhangsan')

select * from employee;
select * from department;select * from employee;
select * from department;

begin transaction
declare @errorSum int 
set @errorSum = 0
insert into department(name,num)
values('软件一部','001')
insert into employee(name,departmentId)
values ('lishi','1')
set @errorSum =@errorSum + @@error --累加错误到变量@errorSum中
if @errorSum <>0
begin
print '------------------回滚事务--------------------------'
rollback transaction
end
else 
begin
print '------------------提交事务---------------------------'
commit transaction
end
### SQL Server事务回滚的操作指南 在 SQL Server 中,当遇到错误或其他异常情况时,可以通过 `ROLLBACK TRANSACTION` 命令来撤销当前事务中的所有更改。这确保了数据库的一致性和完整性。 #### 语法说明 要执行事务回滚,可以使用如下命令: ```sql IF @@TRANCOUNT > 0 ROLLBACK TRANSACTION; ``` 这条语句检查是否有未提交的事务存在 (`@@TRANCOUNT`);如果有,则执行回滚操作[^1]。 #### 自动回滚机制 对于多活动结果集 (MARS) 的场景下,如果在一个批处理结束前没有显式地提交或回滚事务SQL Server 将自动触发回滚动作以防止悬挂状态的发生。 #### 手动回滚示例 下面展示了一个简单的例子,其中包含了如何手动发起一次事务并最终选择性地进行回滚: ```sql BEGIN TRY BEGIN TRANSACTION; -- 插入一些记录到表中... INSERT INTO Orders (OrderID, CustomerID, OrderDate) VALUES ('ORD123', 'CUST987', GETDATE()); -- 故意制造一个除零错误引发异常 SELECT 1 / 0 AS DivisionByZeroError; COMMIT TRANSACTION; -- 如果一切顺利则提交事务 END TRY BEGIN CATCH IF @@TRANCOUNT > 0 ROLLBACK TRANSACTION; -- 出现任何问题就立即回滚 PRINT ERROR_MESSAGE(); -- 输出捕获到的具体错误信息 END CATCH ``` 在这个脚本里,通过 `TRY...CATCH` 结构实现了对潜在运行期错误的安全捕捉,并且只有当确实发生了不可恢复的问题时才会调用 `ROLLBACK TRANSACTION` 来撤消之前所做的变更。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值