一直以来我都是在存储过程中使用事务

create proc usp_proc

begin

begin  tran

.....

commit

end

那么我现在问一个问题,如果在BCB的代码中写这样的代码

ADOConnection->BeginTrans();

ADOQuery->SQL->Text = "EXEC usp_proc ";

//ADOConnection->CommitTrans();  <---注意,我没有提交事务!

那么存储过程中的事务会提交吗?

答案是:NO

--------------------------------------------

那么现在来回答,为什么存储过程中的事务没有提交。

本质原因是因为:存储过程中的事务没有命名。

它只是简单的写了

BEGIN TRAN

COMMIT

于是问题就来,当BCB启动了一个事务的时候,

执行存储过程 到COMMIT 处,SQL SERVER 到底是提交 BCB代码中 BeginTrans 开启的事务呢,还是 存储过程中的事务呢?

因为没有显示的指定要提交哪一个事务,所以,SQL SERVER 就提交“上一个”;(类似计数器风格)

因为BCB 代码中的事务是先开始的,所以SQL SERVER 提交的是 BCB代码中的事务。也就是说,存储过程中的事务并没有提交。

那么,假设你的存储过程中有一个 TABLOCKX ,会怎样,全部都会阻塞。

总结一句话,COMMIT 这样的代码,是让SQL SERVER 简单的提交上一个事务而已。

换句话说,你可以这么写代码(如果你真的这么写,被开除了不要怪我)

BCB中

ADOConnectin->BeginTrans();

然后执行存储过程。

存储过程中这么写

create proc usp_proc

as

begin

。。。。do sth

commit;  <---直接写一个commit,它就会提交BCB代码中的事务。

end

那么如何保证存储过程中的事务提交呢?

答案是给事务命名

具体的写法看MSDN 的例子,这样,即使BCB得事务没有提交,SQL SERVER 也一定会提交存储过程中的事务的。

DECLARE @TranName VARCHAR(20);
SELECT @TranName = 'MyTransaction'; BEGIN TRANSACTION @TranName;
USE AdventureWorks2008R2;
DELETE FROM AdventureWorks2008R2.HumanResources.JobCandidate
WHERE JobCandidateID = 13; COMMIT TRANSACTION @TranName;
GO

再谈谈BCB中能不呢个对事务进行命名。答案是:NO

再来谈谈事务和会话的关系,一个会话可以有多个事务,比如 先执行事务A,再执行事务B,再提交事务A,然后提交事务B ,

这其实是事务嵌套,B事务嵌套到A事务中了。

用一个ADOConnection 做不到,只能借助存储过程来做。切记,BCB的ADOConnection 只能开启一个事务。

ADOConnectoin事务和存储过程中的Begin tran commit的更多相关文章

  1. sql语句中BEGIN TRAN...COMMIT TRAN

    BEGIN TRAN标记事务開始  COMMIT TRAN 提交事务  一般把DML语句(select ,delete,update,insert语句)放在BEGIN TRAN...COMMIT TR ...

  2. BEGIN TRAN...COMMIT TRAN 意思与用法

    BEGIN TRAN标记事务开始 COMMIT TRAN 提交事务 一般把DML语句(select ,delete,update,insert语句)放在BEGIN TRAN...COMMIT TRAN ...

  3. Sql Server 中事务(begin tran/commit tran/rollback tran)的用法

    ALTER PROCEDURE [dbo].[Proc_Test_commit1]     @result int output, --成功 1; 失败 0     @message nvarchar ...

  4. 数据库事务及其EF中如何处理事务

    一.基础知识 1)         使用事务级别ReadUnCommited 会产生脏读现像,意味着读取到的为UnCommited(未提交)的数据.怎么理解呢?在使用该隔离级别的事务开始后.更新了数据 ...

  5. SQL 事务 begin tran、commit tran、rollback tran 的用法

    首先理解一下这三个事务的大概意思: begin Transaction 可以理解成新建一个还原点. commit Transaction 提交这个自begin tran开始的修改 rollback T ...

  6. SQLServer------begin tran/commit tran事务的使用方法

    转载: http://www.cnblogs.com/accumulater/p/6089838.html 介绍 BEGIN TRAN 标记事务开始 COMMIT TRAN 提交事务 一般把DML语句 ...

  7. MySQL存储过程中declare和set定义变量的区别

    在存储过程中常看到declare定义的变量和@set定义的变量.简单的来说,declare定义的类似是局部变量,@set定义的类似全局变量. 1.declare定义的变量类似java类中的局部变量,仅 ...

  8. sqlserver中事务总结:begin tran,rollback tran,commit tran

     第1个相关用法:摘自:https://shiyousan.com/post/f13d29b7-0d87-4168-bd8b-8b28b0991b5a 以下是出现错误的SQL部分语句: 此错误的原因是 ...

  9. sql server 存储过程中,调用事务 tran

      Sql Server 2005/2008中提供了begin tran,commit tran和rollback tran来使用事务. begin tran表示开始事务, commit tran表示 ...

随机推荐

  1. if you end up with a boring miserable life

  2. MyBatis学习(一)、MyBatis简介与配置MyBatis+Spring+MySql

    一.MyBatis简介与配置MyBatis+Spring+MySql 1.1MyBatis简介 MyBatis 是一个可以自定义SQL.存储过程和高级映射的持久层框架.MyBatis 摒除了大部分的J ...

  3. HDU 2222 关键词查找

    题目大意:给出一篇文章,长度最多1000000,若干个关键词,关键词有可能重复.关键词不超过10000,每个关键词不超过50个字符.请问该文章包含多少个关键词. 这是AC自动机的入门题.首先将关键词分 ...

  4. mysql处理高并发,防止库存超卖

    先来就库存超卖的问题作描述:一般电子商务网站都会遇到如团购.秒杀.特价之类的活动,而这样的活动有一个共同的特点就是访问量激增.上千甚至上万人抢购一个商品.然而,作为活动商品,库存肯定是很有限的,如何控 ...

  5. sqlite升级--浅谈Android数据库版本升级及数据的迁移

    Android开发涉及到的数据库采用的是轻量级的SQLite3,而在实际开发中,在存储一些简单的数据,使用SharedPreferences就足够了,只有在存储数据结构稍微复杂的时候,才会使用数据库来 ...

  6. 移动应用开发测试工具Bugtags集成和使用教程

    前段时间,有很多APP突然走红,最终却都是樱花一现.作为一个创业团队,突然爆红是非常难得的机会.然并卵,由于没有经过充分的测试,再加上用户的激增,APP闪退.服务器数据异常等问题就被暴露出来,用户的流 ...

  7. Android开发资料学习(转载/链接)

    http://www.devdiv.com/android_-forum-102-1.html 各种开源控件集合 http://www.cnblogs.com/android-blogs/p/5342 ...

  8. [DFNews] EnCase 更新至 v7.10

    有加密狗的可以注册接收邮件下载 暂时只有英文版 前几天讲课还说到,EnCase的Template倒是好,但是稍微改一下Case Template自带的Bookmark结构,那么Report就看不到了, ...

  9. xcode:关于Other Linker Flags

    一.关于Other Linker Flags xcode中,在“Targets”选项下有Other Linker Flags选项,在这里可以填写xcode链接器的参数,如:-ObjC.-all_loa ...

  10. QBC

    c.add(Restrictions.sqlRestriction("exists (SELECT p.loan_contract_no FROM crf_p2p_app_info p WH ...