ADOConnectoin事务和存储过程中的Begin tran commit
一直以来我都是在存储过程中使用事务
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的更多相关文章
- sql语句中BEGIN TRAN...COMMIT TRAN
BEGIN TRAN标记事务開始 COMMIT TRAN 提交事务 一般把DML语句(select ,delete,update,insert语句)放在BEGIN TRAN...COMMIT TR ...
- BEGIN TRAN...COMMIT TRAN 意思与用法
BEGIN TRAN标记事务开始 COMMIT TRAN 提交事务 一般把DML语句(select ,delete,update,insert语句)放在BEGIN TRAN...COMMIT TRAN ...
- Sql Server 中事务(begin tran/commit tran/rollback tran)的用法
ALTER PROCEDURE [dbo].[Proc_Test_commit1] @result int output, --成功 1; 失败 0 @message nvarchar ...
- 数据库事务及其EF中如何处理事务
一.基础知识 1) 使用事务级别ReadUnCommited 会产生脏读现像,意味着读取到的为UnCommited(未提交)的数据.怎么理解呢?在使用该隔离级别的事务开始后.更新了数据 ...
- SQL 事务 begin tran、commit tran、rollback tran 的用法
首先理解一下这三个事务的大概意思: begin Transaction 可以理解成新建一个还原点. commit Transaction 提交这个自begin tran开始的修改 rollback T ...
- SQLServer------begin tran/commit tran事务的使用方法
转载: http://www.cnblogs.com/accumulater/p/6089838.html 介绍 BEGIN TRAN 标记事务开始 COMMIT TRAN 提交事务 一般把DML语句 ...
- MySQL存储过程中declare和set定义变量的区别
在存储过程中常看到declare定义的变量和@set定义的变量.简单的来说,declare定义的类似是局部变量,@set定义的类似全局变量. 1.declare定义的变量类似java类中的局部变量,仅 ...
- sqlserver中事务总结:begin tran,rollback tran,commit tran
第1个相关用法:摘自:https://shiyousan.com/post/f13d29b7-0d87-4168-bd8b-8b28b0991b5a 以下是出现错误的SQL部分语句: 此错误的原因是 ...
- sql server 存储过程中,调用事务 tran
Sql Server 2005/2008中提供了begin tran,commit tran和rollback tran来使用事务. begin tran表示开始事务, commit tran表示 ...
随机推荐
- TLB初始化 Missing Handler,MIPS R3K mips_init_tlb
#include <mips/r3kc0.h> LEAF(mips_init_tlb) mfc0 t0, C0_ENTRYHI # 保存ASID mtc0 zero, C0_ENTRYLO ...
- Verilog HDL那些事_建模篇笔记(实验三:按键消抖)
实验三:按键消抖 首先将按键消抖功能分成了两个模块,电平检查模块和10ms延迟模块.电平检测模块用来检测按键信号的变化(是否被按下),10ms延迟模块用来稳定电平检查模块的输入,进而稳定按键信号,防止 ...
- JMeter Webservice测试计划
一.新建测试计划:HelloWorld测试计划 二.添加线程组 编辑线程组属性: 三.添加 SOAP/ XML-RPC 请求元素 四.填入url地址及请求报文 此处的请求报文,是用soapUI生成的, ...
- HTML 代码复用实践 (静态页面公共部分提取复用)
原文:HTML 代码复用实践 上面的链接里面安装配置步骤已经非常详细,这里主要记录我操作过程中遇到的几个问题 gulp-file-include 的使用 按上面的步骤安装之后,node_mod ...
- Fastboot模式和Recovery模式
http://blog.csdn.net/luoshengyang/article/details/29688041 在回答第一个问题之前,我们先来看看Android设备从硬件到系统的结构,如图1所示 ...
- 通过开户银行账号查询客商名称 sql
select * from bd_cubasdoc where pk_cubasdoc in ( ') 查询空客商客户银行的单位名称 select b.custcode,b.custname, d.b ...
- Access forbidden! You don't have permission to access the requested object. It is either read-protected or not readable by the server
好久不没弄 apache和php了,突然遇到这种奇葩的问题,本来想直接在网上找现成的解决思路,结果网上搜索花了不少功夫,也没找到原因. 后来看日志文件:apache\logs\error.log发现了 ...
- not子查询中有null值的时候 not in 会失效
not in子查询中有null值的时候 not in 会失效 但是 in 的子查询中有null的 不会失效
- error: L6235E: More than one section matches selector - cannot all be FIRST/LAST
解决措施http://blog.csdn.net/chenbang110/article/details/7586244
- CentOS 7 用户怎样安装 LNMP(Nginx+PHP+MySQL)
关于 Nginx (发音 “engine x”)这是一款免费.开源.高效的 HTTP 服务器,Nginx是以稳定著称,丰富的功能,结构简单,低资源消耗.本教程演示如何在CentOS 6.5服务器(适用 ...