Home  >  Article  >  Database  >  关于SQL Server 事务、异常和游标详解(1/3)

关于SQL Server 事务、异常和游标详解(1/3)

WBOY
WBOYOriginal
2016-06-07 15:04:401249browse

本教程来说一下 关于 SQL Server 事务 、 异常 和 游标 的事情下面来看教程,希望对你有帮助。 1、 事务 的特点 事务 有若干条T-SQL指令组成,并且所有的指令昨晚一个整体提交给数据库教程系统,执行时,这组指令要么全部执行完成,要么全部取消。因此, 事

本教程来说一下关于SQL Server 事务异常游标的事情下面来看教程,希望对你有帮助。

1、 事务的特点

        事务有若干条T-SQL指令组成,并且所有的指令昨晚一个整体提交给数据库教程系统,执行时,这组指令要么全部执行完成,要么全部取消。因此,事务是一个不可分割的逻辑单元。

 

        事务有4个属性:原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)以及持久性(Durability),也称作事务的ACID属性。

        原子性事务内的所有工作要么全部完成,要么全部不完成,不存在只有一部分完成的情况。

        一致性事务内的然后操作都不能违反数据库的然后约束或规则,事务完成时有内部数据结构都必须是正确的。

        隔离性事务直接是相互隔离的,如果有两个事务对同一个数据库进行操作,比如读取表数据。任何一个事务看到的所有内容要么是其他事务完成之前的状态,要么是其他事务完成之后的状态。一个事务不可能遇到另一个事务的中间状态。

        持久性事务完成之后,它对数据库系统的影响是持久的,即使是系统错误,重新启动系统后,该事务的结果依然存在。

 

    2、 事务的模式

        a、 显示事务

        显示事务就是用户使用T-SQL明确的定义事务的开始(begin transaction)和提交(commit transaction)或回滚事务(rollback transaction)

        b、 自动提交事务

        自动提交事务是一种能够自动执行并能自动回滚事务,这种方式是T-SQL的默认事务方式。例如在删除一个表记录的时候,如果这条记录有主外键关系的时候,删除就会受主外键约束的影响,那么这个删除就会取消。

        可以设置事务进入隐式方式:set implicit_transaction on;

        c、 隐式事务

        隐式事务是指当事务提交或回滚后,SQL Server自动开始事务。因此,隐式事务不需要使用begin transaction显示开始,只需直接失业提交事务或回滚事务的T-SQL语句即可。

        使用时,需要设置set implicit_transaction on语句,将隐式事务模式打开,下一个语句会启动一个新的事物,再下一个语句又将启动一个新事务

 

    3、 事务处理

        常用T-SQL事务语句:

        a、 begin transaction语句

        开始事务,而@@trancount全局变量用来记录事务的数目值加1,可以用@@error全局变量记录执行过程中的错误信息,如果没有错误可以直接提交事务,有错误可以回滚。

        b、 commit transaction语句

        回滚事务,表示一个隐式或显示的事务的结束,对数据库所做的修改正式生效。并将@@trancount的值减1;

        c、 rollback transaction语句

        回滚事务,执行rollback tran语句后,数据会回滚到begin tran的时候的状态

 

    4、 事务的示例

--开始事务
begin transaction tran_bank;
declare @tran_error int;
set @tran_error = 0;
begin try
update bank set totalMoney = totalMoney - 10000 where userName = 'jack';
set @tran_error = @tran_error + @@error;
update bank set totalMoney = totalMoney + 10000 where userName = 'jason';
set @tran_error = @tran_error + @@error;
end try
begin catch
print '出现异常,错误编号:' + convert(varchar, error_number()) + ', 错误消息:' + error_message();
set @tran_error = @tran_error + 1;
end catch
if (@tran_error > 0)
begin
--执行出错,回滚事务
rollback tran;
print '转账失败,取消交易';
end
else
begin
--没有异常,提交事务
commit tran;
print '转账成功';
end
go

 

Ø 异常

     在程序中,有时候完成一些Transact-SQL会出现错误、异常信息。如果我们想自己处理这些异常信息的话,需要手动捕捉这些信息。那么我们可以利用try catch完成。

TRY…CATCH 构造包括两部分:一个 TRY 块和一个 CATCH 块。如果在 TRY 块中所包含的 Transact-SQL 语句中检测到错误条件,控制将被传递到 CATCH 块(可在此块中处理该错误)。

     CATCH 块处理该异常错误后,控制将被传递到 END CATCH 语句后面的第一个 Transact-SQL 语句。如果 END CATCH 语句是存储过程或触发器中的最后一条语句,控制将返回到调用该存储过程或触发器的代码。将不执行 TRY 块中生成错误的语句后面的 Transact-SQL 语句。

     如果 TRY 块中没有错误,控制将传递到关联的 END CATCH 语句后紧跟的语句。如果 END CATCH 语句是存储过程或触发器中的最后一条语句,控制将传递到调用该存储过程或触发器的语句。

     TRY 块以 BEGIN TRY 语句开头,以 END TRY 语句结尾。在 BEGIN TRY 和 END TRY 语句之间可以指定一个或多个 Transact-SQL 语句。CATCH 块必须紧跟 TRY 块。CATCH 块以 BEGIN CATCH 语句开头,以 END CATCH 语句结尾。在 Transact-SQL 中,每个 TRY 块仅与一个 CATCH 块相关联。

     # 错误函数

1 2 3

你可能感兴趣的文章

    如何修改SQL Server 2005/2008 数据库路径

    php 如何连接MS SQL Server 数据库

    怎么快速获取access、SQL Server数据

    SQL Server中自动获取编号字段

    SQL Server中快速删除重复记录

    如何确定SQL Server栏中的最大值

    修复SQL Server的MDF文件的方法

    SQL Server数据库崩溃的方法

    SQL Server 2008可用性

    SQL Server 2008 R2新特性:主数据管理

    SQLServer定量性能分析

    SQLServer执行计划成本

上一页:SQL Server 中时间比较详解   下一页:SQL Server中如何比较两个表的各组数据方法总结

关于SQL Server 事务异常游标详解(1/3)的评论

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn