首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

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

2012-01-18 
关于存储过程事务问题写了一个存储过程,用于确定是否更新数据,如果没有更新成功数据回滚。请指教是否正确,

关于存储过程事务问题
写了一个存储过程,用于确定是否更新数据,如果没有更新成功数据回滚。请指教是否正确,如果不正确,如何更改????

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

  AS

--Set   nocount   on

BEGIN   TRAN   Detail

UPDATE   WinUser   SET     Password=@NewPassword   WHERE   Account=@Account   AND   Password=@OldPassword

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)

热点排行