在这里我们主要是介绍SQL Server 中事务在存储过程中的应用,首先我们先来了解下什么是事务。
(1):事务(Transaction)事务是恢复和并发控制的基本单位。 是用户定义的一个操作序列。这些操作要么都做,要么都不做,是一个不可分割的工作单位。通过事务,SQL Server能将逻辑相关的一组操作绑定在一起,以便服务器保持数据的完整性。
(2):事务通常是以BEGIN TRANSACTION开始,以COMMIT或ROLLBACK结束。
COMMIT表示提交,即提交事务的所有操作。具体地说就是将事务中所有对数据库的更新写回到磁盘上的物理数据库中去,事务正常结束。
ROLLBACK表示回滚,即在事务运行的过程中发生了某种故障,事务不能继续进行,系统将事务中对数据库的所有以完成的操作全部撤消,滚回到事务开始的状态。
我们通过下面的例子来看看,它到底是怎么使用,以及使用它的好处。
①,我们准备一个数据库表
CREATE TABLE [dbo].[storeA](
[Aid] [int] NULL,
[Aname] [varchar](200) COLLATE Chinese_PRC_CI_AS NULL,
[price] [float] NULL
) ON [PRIMARY]
表数据如下图所示:
②,我们来创建一个存储过程
create proc tt
as
begin
Begin Try
Begin Transaction
Update dbo.storeA Set Aid = 7 Where Aname ='N73'
Update dbo.storeA Set Aid = 9 Where Aname ='N97'
Insert Into dbo.storeA(Aid) Values('sdfs') --此语句将出错,LockTypeID为Int类型
Update dbo.storeA Set Aid = 8 Where Aname ='N95'
Commit Transaction
End Try
Begin Catch
Rollback Transaction
End
Catch
end
/*
当我们执行该存储过程 EXEC TT 之后,我们发现中间有一条插入的数据,是报错的,因为Aid字段类型是整型,
而我们插入的是字符串,由于事务的执行是要么都通过,要么都回滚,所以在事务中只要有出现错误,所以操作
都会被回滚,也就是说,我们里面执行的3个修改语句,都不会被修改到。
以上是事务的使用,对于高并发或者多步骤操作,使用事务可以保证数据的完整性,但需慎用,因为会影响性能。
下面是没有包含try catch 的事务,可以显示错误信息
*/
/*下面是没有包含try catch 的事务,可以显示错误信息*/
Create PROCEDURE [dbo].[tt2]
As
Begin
Begin Transaction
Update dbo.storeA Set Aid = 7 Where Aname ='N73'
Update dbo.storeA Set Aid = 9 Where Aname ='N97'
Insert Into dbo.storeA(Aid) Values('sdfs') --此语句将出错,LockTypeID为Int类型
Update dbo.storeA Set Aid = 8 Where Aname ='N95'
Commit Transaction
If(@@ERROR <> 0)
Rollback Transaction
End
/*
exec tt2
*/