SQL事务

Begin TransAction 开始事务

rollback TransAction 提交事务

 Commit TransAction 回滚事务

 

USE pubs   

DECLARE @intErrorCode INT  

BEGIN TRAN   

UPDATE Authors     SET Phone = '415 354-9866'   WHERE au_id = '724-80-9391'  

 SELECT @intErrorCode = @@ERROR   

IF (@intErrorCode <> 0) GOTO PROBLEM   

UPDATE Publishers    SET city = 'Calcutta', country = 'India'    WHERE pub_id = '9999'   

 SELECT @intErrorCode = @@ERROR   

IF (@intErrorCode <> 0) GOTO PROBLEM   

COMMIT TRAN     

PROBLEM:   

IF (@intErrorCode <> 0) BEGIN  

PRINT 'Unexpected error occurred!'  

 ROLLBACK TRAN   

END  

在真正处理开始之前,使用BEGIN TRAN标记:下面所有的动作作为一个事务。里边包含两个update语句。如果没有出错,当执行到COMMIT TRAN所有的改变被提交到数据库,存储过程完成。如果在执行update出错,通过检测@@ERROR,跳转到PROBLEM标签,显示错误信息,回滚这期间所有的修改。
注意:确保BEGIN TRAN 和COMMIT 或 ROLLBACK成对出现

嵌套事务

SQL Server 容许你嵌套事务,这个特性意味着,即使上一个事务没有完成,也能开启一个新事务。T-SQL容许你通过嵌套BEGIN TRAN嵌套事务。 内置变量@@TRANCOUNT可显示事务的嵌套层级。0表示没有嵌套,1表示嵌套一层,依此类推。

 

SAVE TRAN 和保存点

保存点提供了事务部分回滚的机制。用户能在事务内部设置保存点或标记。保存点定义一个当事务被撤销时,回滚的位置。SQL Server容许用户通过SAVE TRAN语句定义保存点。申明保存点不影响@@TRANCOUNT的值,回滚到保存点也不影响@@TRANCOUNT。回滚必须ROLLBACK TRAN带有保存点的名称,否则回滚整个事务。

错误处理

当一个错误出现时,你所能做的是:终止代码执行顺序。要么把代码路由到别的代码,或者返回终止程序。@@ERROR这个系统变量常用来实现错误处理。它包含SQL语句最后执行错误的代码。当代码执行成功, @@ERROR的值是0,当代码执行完成,立即使用IF语句判断@@ERROR的值。这是因为当下一个语句执行成功时,@@ERROR的值会被重置为0。所以必须立即捕获。经常在执行完NSERT, UPDATE, 或 DELETE语句后,你需要立即测试@@ERROR值的变化。

 

你可能感兴趣的:(sql,sql,数据库,server,测试,delete,存储)