当前位置: 代码迷 >> Sql Server >> 关于存储过程事务有关问题
  详细解决方案

关于存储过程事务有关问题

热度:80   发布时间:2016-04-27 17:24:57.0
关于存储过程事务问题
写了一个存储过程,用于确定是否更新数据,如果没有更新成功数据回滚。请指教是否正确,如果不正确,如何更改????

CREATE   PROCEDURE   WinUpdateUserInfo
@Account   varchar(30),
@OldPassword   varchar(30),
@NewPassword   varchar(30)

  AS

--Set   nocount   on

BEGIN   TRAN   Detail

UPDATE   WinUser   SET     [email protected]   WHERE   [email protected]   AND   [email protected]

COMMIT   TRAN   InsertDetail--事务提交

IF   (@@error   <>   0) -- 事务回滚

BEGIN
ROLLBACK   TRANSACTION   Detail
RETURN   0
END
RETURN   1

GO




------解决方案--------------------
如果事务中只有一个SQL语句,加不加事务都没有关系,SQL Server中单个SQL语句就是一个隐性事务。

但是如果多个SQL语句,则格式类似如下:

--设置开关项,事务中任意一个SQL语句出错,都回滚整个事务
set xact_abort on

begin tran

...
...

commit tran


--如果发生严重错误,用(@@error <> 0)判断,系统根本就不会执行到这句


所以必须设置 set xact_abort on



------解决方案--------------------
--从mdb中获取数据

SELECT a.*
FROM OPENROWSET( 'Microsoft.Jet.OLEDB.4.0 ',
'c:\MSOffice\Access\Samples\northwind.mdb '; 'admin '; 'mypwd ', Orders)
  相关解决方案