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