简单的SQL Server事务处理方法!

     相信大家在日常编程中,都会遇到同时更新或同时维护多个表的操作,为保持数据的一致性,SQL Server里为我们提供很多便利方法,其中之一就是“事务处理”的办法。事务处理?可以简单实例化理解为:我们要同时更新表1、表2(不能因网络原因,在更新完表1后,由于断电或网络故障导致表2没有更新而致使两表的数据不能一致,在这种情况下,我们如何保证这两个表同时更新,操作才有效呢?这就是我想为大家介绍的事务处理简单方法)

    事务处理的一大优点就是,当表1与表2在一个事务处理过程中(当然要把操作表1、表2的维护动作放进一个事务进程中才有效),只要任何一个表操作不成功,两个表的任何操作在SQL里都是无效的,两个表的操作要同事操作成功SQL才让操作生效,这就达到数据的一致性。如何实现,简单介绍一下:

1、VFP里如何通知SQL Server开始一个事务呢?

通过 SQLSETPROP()函数实现

IF SQLSETPROP(nConnectionHandle,"Transactions",2)<=0

   =MESSAGEBOX("提交事务开始不成功",16,"提示")

ELSE

   =MESSAGEBOX("提交事务开始成功",16,"提示")

ENDIF

2、VFP里如何通知SQL Server结束一个事务呢? 

IF SQLSETPROP(nConnectionHandle,"Transactions",1)<=0

   =MESSAGEBOX("事务结束不成功",16,"提示")

ELSE

   =MESSAGEBOX("事务结束成功",16,"提示")

ENDIF  

3、  数据处理代码的应该放在事务处理的哪个位置呢?

在VFP要提交给SQL Server处理的数据应该放在以上第1点后,事务成功开始后边,第2点应该放在数据处理完结的后边。

4、事务处理的开始后,VFP还要提醒SQL Server去执行处理:

    SQLCOMMIT()函数实现:   

SQLCOMMIT(nConnectionHandle):表示通知SQL Server提交一个事务处理

注意:当以上第3点的数据处理全部成功了,但没有在这之后没有执行事务提交的话,操作还是不成功的。

      所以在一个事务结束前,必须提交这个事务让SOL Server进行处理。

5、如何取消一个事务的执行结果:

   SQLROLLBACK(nConnectionHandle)函数能实现这个。

以上是实现SQL Server简单事务处理的方法,详细的还要靠大家去看看这些函数的一些用法与设置。

如其他狐友们有什么好建议,不妨在此提出,大家互相探讨一下。谢谢!

 

转载于:https://www.cnblogs.com/hylan/archive/2008/09/26/1299815.html

自己备用的,对别人没有用 CREATE FUNCTION SplitStr (@splitString varchar(8000), @separate varchar(10)) RETURNS @returnTable table(id int, col_Value varchar(50)) AS BEGIN declare @thisSplitStr varchar(50) declare @thisSepIndex int declare @lastSepIndex int declare @i int set @lastSepIndex = 0 set @i = 1 if Right(@splitString ,len(@separate)) @separate set @splitString = @splitString + @separate set @thisSepIndex = CharIndex(@separate,@splitString ,@lastSepIndex) while @lastSepIndex <= @thisSepIndex begin set @thisSplitStr = SubString(@splitString ,@lastSepIndex,@thisSepIndex-@lastSepIndex) set @lastSepIndex = @thisSepIndex + 1 set @thisSepIndex = CharIndex(@separate,@splitString ,@lastSepIndex) insert into @returnTable values(@i, @thisSplitStr) set @i = @i + 1 end return END go --drop procedure sp_add_userFunction create procedure sp_add_userFunction @functionList varchar(5000), @userId varchar(50) as DECLARE @count INTEGER DECLARE @index INTEGER declare @functionId varchar(50) set @count = (select count(*) from SplitStr(@functionList,',')) set @index = 0 begin transaction delete from xt_user_function where user_id = @userId if @@error 0 begin rollback transaction--发生错误则回滚事务,无条件退出l return end while @index<@count begin set @functionId = (select col_Value from SplitStr(@functionList,',') where id = @index + 1) insert into xt_user_function(function_id, user_id) values (@functionId, @userId) SET @index=@index+1 end if @@error 0 begin rollback transaction--发生错误则回滚事务,无条件退出l return end commit transaction --两条语句都完成,提交事务 go
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值