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