1.如何使用显式事务根据一组语句返回的错误来提交或者回滚数据修改:
USE AdventureWorks
go
--之前的数量
SELECT COUNT(*) BeforeCount FROM HumanResources.Department
--用于保存最新错误整数值的变量
DECLARE @Error int
--开始一个显式事务
BEGIN TRANSACTION
INSERT HumanResources.Department
(Name,GroupName)
VALUES
('Accounts Payable','Accounting')
SET @Error=@@ERROR
IF (@ERROR<>0) GOTO Error_Handler
INSERT HumanResources.Department
(Name,GroupName)
VALUES
('Engineering','Research and Development')
SET @Error=@@ERROR
IF(@Error<>0) GOTO Error_Handler
COMMIT TRAN
Error_Handler:
IF @Error<>0
BEGIN
ROLLBACK TRANSACTION
END
--之后的数量
SELECT COUNT(*) AffterCount FROM HumanResources.Department
在T-SQL代码或者应用程序中处理事务的思想和建议。
- 1.对要做的业务处理,事务操作的时间要尽可能短。保持事务打开会让资源在很长一段时间内 处于锁定状态,这样会阻塞其他用户进行操作或读取数据。
- 2.最小化由事务锁定的资源。例如,只更新与要做的事务有关的表。如果数据修改在逻辑上相互依赖,则它们应该属于同一个事务,否则,不相关的更新应该在它们自己的事务中.
- 3.只向事务添加相关的T-SQL操作。不要向某个事务添加与它关系不大的额外的查找或更新。在事务中执行SELECT语句会在关联表上加锁,这样会导致其他用户/会话不能执行操作或读取数据。
- 4.不要打开需要在事务内等待用户或外部反馈的新事务。打开事务会让资源处于加锁状态,用户的反馈可能会需要不确定的一段时间来接收。因此,应该在发出显式事务之前先收集用户 的反馈。