如何使用Transact-SQL进行事务处理[示例]
如何利用Transact-SQL执行事务
下列存储过程说明了如何在Transact-SQL过程内执行事务的支金转移操作。
CREATE PROCEDURE MoneyTransfer @FromAccount char(20), @ToAccount char(20), @Amount money AS BEGIN TRANSACTION -- PERFORM DEBIT OPERATION UPDATE Accounts SET Balance = Balance - @Amount WHERE AccountNumber = @FromAccount IF @@RowCount = 0 BEGIN RAISERROR('Invalid From Account Number', 11, 1) GOTO ABORT END DECLARE @Balance money SELECT @Balance = Balance FROM ACCOUNTS WHERE AccountNumber = @FromAccount IF @BALANCE < 0 BEGIN RAISERROR('Insufficient funds', 11, 1) GOTO ABORT END -- PERFORM CREDIT OPERATION UPDATE Accounts SET Balance = Balance + @Amount WHERE AccountNumber = @ToAccount IF @@RowCount = 0 BEGIN RAISERROR('Invalid To Account Number', 11, 1) GOTO ABORT END COMMIT TRANSACTION RETURN 0 ABORT: ROLLBACK TRANSACTION GO
该存储过程使用BEGIN TRANSACTION, COMMIT TRANSACTION,和ROLLBACK TRANSACTION状态手工控制事务。
如何编码事务性的.NET类
下述例子是三种服务性的NET类,它们配置或用于自动事务。每个类都带有Transaction属性,它的值将决定是否启动新事务流或者对象是否共享即时调用程序的数据流。这些元素一起工作来执行银行支金转移。Transfer类配置有RequiresNew事务属性,而Debit和Credit类配置有Required属性。这样,在运行的时候三个对象共享同一个事务。
using System; using System.EnterpriseServices; [Transaction(TransactionOption.RequiresNew)] public class Transfer : ServicedComponent { [AutoComplete] public void Transfer( string toAccount, string fromAccount, decimal amount ) { try { // Perform the debit operation Debit debit = new Debit(); debit.DebitAccount( fromAccount, amount ); // Perform the credit operation Credit credit = new Credit(); credit.CreditAccount( toAccount, amount ); } catch( SqlException sqlex ) { // Handle and log exception details // Wrap and propagate the exception throw new TransferException( "Transfer Failure", sqlex ); } } } [Transaction(TransactionOption.Required)] public class Credit : ServicedComponent { [AutoComplete] public void CreditAccount( string account, decimal amount ) { SqlConnection conn = new SqlConnection( "Server=(local); Integrated Security=SSPI"; database="SimpleBank"); SqlCommand cmd = new SqlCommand("Credit", conn ); cmd.CommandType = CommandType.StoredProcedure; cmd.Parameters.Add( new SqlParameter("@AccountNo", account) ); cmd.Parameters.Add( new SqlParameter("@Amount", amount )); try { conn.Open(); cmd.ExecuteNonQuery(); } catch (SqlException sqlex) { // Log exception details here throw; // Propagate exception } } } [Transaction(TransactionOption.Required)] public class Debit : ServicedComponent { public void DebitAccount( string account, decimal amount ) { SqlConnection conn = new SqlConnection( "Server=(local); Integrated Security=SSPI"; database="SimpleBank"); SqlCommand cmd = new SqlCommand("Debit", conn ); cmd.CommandType = CommandType.StoredProcedure; cmd.Parameters.Add( new SqlParameter("@AccountNo", account) ); cmd.Parameters.Add( new SqlParameter("@Amount", amount )); try { conn.Open(); cmd.ExecuteNonQuery(); } catch (SqlException sqlex) { // Log exception details here throw; // Propagate exception back to caller } } }
转载于:https://www.cnblogs.com/lxinxuan/archive/2006/09/04/494738.html
如何使用Transact-SQL进行事务处理[示例]相关推荐
- 交互式SQL(Transact SQL,TSQL)
交互式SQL(Transact SQL,TSQL) 它是SQL Server的查询语言.提供以下命令: · 创建和数据库对象. · 访问和修改数据. · 数据聚合(aggregation,又称聚集). ...
- sql子查询示例_SQL更新查询示例说明
sql子查询示例 In this article, we're going to learn how to use the SQL update statement - what it is, wha ...
- 安装SQL Server 2012示例数据库
SQL Server的示例数据库是一个非常好的学习数据库的范例,在安装完SQL Server 2012后,默认情况下是不会安装示例数据库的,我们需要自己进行一些安装和设置. 安装Adventure W ...
- Transact SQL 常用语句以及函数
Transact SQL 语 句 功 能 ======================================================================== --数据 ...
- mysql count if语句_COUNT分组条件去重的sql统计语句示例(mysql)
常规情况下的sql分组统计为: select count(1) from 表 where 条件 group by 字段; 但是有时往往需要添加不同的条件已经去重的统计以上语句就不能满足需求. 解决方案 ...
- java调用存储过程 sql server_Java中调用SQL Server存储过程示例
Java中调用SQL Server存储过程示例2007-09-03 08:48来源:论坛整理作者:孟子E章责任编辑:方舟·yesky评论(3) 最近做了个Java的小项目(第一次写Java的项目哦), ...
- sql注入语句示例大全_SQL Order By语句:示例语法
sql注入语句示例大全 Order By is a SQL command that lets you sort the resulting output from a SQL query. Orde ...
- sql注入语句示例大全_SQL Group By语句用示例语法解释
sql注入语句示例大全 GROUP BY gives us a way to combine rows and aggregate data. GROUP BY为我们提供了一种合并行和汇总数据的方法. ...
- SQL Server-SQL事务处理(Stransaction)
ylbtech-SQL Server:SQL Server-SQL事务处理(Stransaction) SQL Server中的SQL事务处理(Stransaction). 1,SQL事务处理(Str ...
- sql子查询示例_学习SQL:SQL查询示例
sql子查询示例 In the previous article we've practiced SQL, and today, we'll continue with a few more SQL ...
最新文章
- 输出一个等边三角形(由*拼接),实心或空心,连长为n
- python vtk_VTK在python环境下的安装和调用
- linux 中断和进程 传递,Linux内核之进程上下文和中断上下文的区别
- 最详细的Mask R-CNN论文笔记
- mysql log stats_MySQL慢查询之pt-query-digest分析慢查询日志
- 【Elasticsearch】推荐一个同步Mysql数据到Elasticsearch的工具
- 本周ASP.NET英文技术文章推荐[03/04 - 03/10]
- 测试面试题集-Python列表去重
- 华科计算机学院三好学生,哲学学院常若帆荣获校“三好学生标兵”称号
- vista的启动修复........
- SHELL中的变量和参数
- 美观实用的BeautifulReport测试报告
- u-boot-2010.09-for-tiny6410-v1.0支持sd卡SDHC卡启动
- 大数据日志分析Hadoop项目实战
- 谷歌浏览器刷新快捷键
- 2022社区团购回暖,创新 O2O 生鲜电商新零售解决方案
- 360等中概股借壳回归之路,亦是赌徒赌壳之时
- 湖北省三甲复审评审资料(2011年版第七章--信息科相关)
- 我本人一直以来犯的错误,在看了《Think In Java》后才抓了出来
- SEW变频器调试步骤(MoviFit,MoviPro,MoviDrive)电气工程师必备(经10年电气工程师总结内部培训资料)
热门文章
- Java多线程300毫秒_Java多线程小程序(输出每个线程的毫秒级时间)-Go语言中文社区...
- 拓端tecdat|R语言分段线性回归分析预测车辆的制动距离
- 拓端tecdat|Nelsen-Siegel—Svensson扩展模型简介
- SET-Priority_Queue
- (5)Matplotlib_grid
- c primer plus 第七章 第十题
- double几位小数_算法竞赛入门之每日一题:分数化化小数(decimal) C语言
- 基于ServerSokect和Soket的简易Qq程序
- 【Pycharm】连接远程服务器并进行代码上传、调试
- 【Caffe代码解析】convert_imageset