首頁 > 資料庫 > mysql教程 > 关于SQL Server 事务、异常和游标详解(1/3)

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

WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWB
發布: 2016-06-07 15:04:40
原創
1386 人瀏覽過

本教程来说一下 关于 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、 事务的示例

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

 

Ø 异常

     在程序中,有时候完成一些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 块相关联。

     # 错误函数

<p class="mupage">1 2 3 </p><p class="bottomAd" id="c_ads4"></p><p class="bodyAboutArt">
        	</p><p class="artTitle">你可能感兴趣的文章</p>
        	
登入後複製

    如何修改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)的评论

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
最新問題
解決PHP錯誤顯示問題的方法
來自於 1970-01-01 08:00:00
0
0
0
如何更改倒數計時中的影像
來自於 1970-01-01 08:00:00
0
0
0
java - springboot新手學習
來自於 1970-01-01 08:00:00
0
0
0
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板