/*本存储过程用来添加个人注册用户的基本用户信息*/
CREATE PROCEDURE dbo.ActiveUsers
(
@SPUserId int,
@UserName nvarchar(50),
@EMail nvarchar(100),
@TranferNumber nvarchar(50),
@XHNumber nvarchar(50),
@UserKind char(10),
@Resource tinyint
)
AS insert into TB_Users(UserName,UserKind,SPId)
VALUES (@UserName,@UserKind,@SPUserId) DECLARE @UserId int
SET @UserId = (select UserId from TB_Users where UserName = @UserName)
insert into TB_PersonInfo(EMail,UserId)
VALUES (@EMail,@UserId) UPDATE TB_XHNumber 
SET TransferPhoneNumber = @TranferNumber,SetStatus = 3,Resource = @Resource,UserId = @UserId
where XHNumber = @XHNumber AND SetStatus = 0
RETURN GO
---------------------
上面是把几个SQL语句弄到了一个存储过程里面了,我在.NET里面执行它的时候,却发现有的时候,有的时候前两个执行成功,后一个执行失败,而我想得到的是,要么都成功,要么失败就回滚,可是我对事务不熟悉,所以请教各位大哥~

解决方案 »

  1.   

    set xact_abort  on   --加上这句,这样在出现错误时,会终止并回滚事务
    begin
        begin tran
        insert table1 ...
        insert table2 ...
        commit tran
    endCREATE PROCEDURE dbo.ActiveUsers
    (
    @SPUserId int,
    @UserName nvarchar(50),
    @EMail nvarchar(100),
    @TranferNumber nvarchar(50),
    @XHNumber nvarchar(50),
    @UserKind char(10),
    @Resource tinyint
    )
    AS
    set xact_abort  on  begin tran insert into TB_Users(UserName,UserKind,SPId)
    VALUES (@UserName,@UserKind,@SPUserId) DECLARE @UserId int
    SET @UserId = (select UserId from TB_Users where UserName = @UserName)
    insert into TB_PersonInfo(EMail,UserId)
    VALUES (@EMail,@UserId) UPDATE TB_XHNumber 
    SET TransferPhoneNumber = @TranferNumber,SetStatus = 3,Resource = @Resource,UserId = @UserId
    where XHNumber = @XHNumber AND SetStatus = 0
    RETURN 
    commit tranGO