有以下sp:
功能:
   使用事务 同时新增 Users 表和 Employees 表, Employees 表中有字段 UserID 关联 Users 表中 UserID.
 
create procedure sp_user_employee_insert
...
as
begin
   begin tran
     -- 新增一 User记录,返回@UserID, 
     exec sp_user_insert @userid output, @userName
     print @Error          insert into employees(UserID, EmployeeName)
       value(@UserID, @EmployeeName)
   if @Error > 0
   begin
      commit tran
      return 0 
  end
   else
   begin
      rollback tran
      return 1
    end
 end
endcreate procedure sp_user_insert
  @UserName varchar(50),
  @UserID output
as
begin
   if @UserName 存在,则
   begin
      RaiseError('用户名存在!', 16, 1)
      return
   end
   
  -- 以下新增 User 记录, 
 
end问上述两个sp, 我在 sp_user_insert 抛出 RaiseError 后,但在sp_user_employee_insert中 @Error 仍是0请问这是怎么回事?谢谢

解决方案 »

  1.   

    你是说在哪一步为0?      exec sp_user_insert @userid output, @userName
         print @@Error --如果有抛出的错误,那这步  @@Error=50000
      

  2.   

    create table [user](UserID int identity(1, 1), UserName varchar(50))
    gocreate procedure sp_user_insert
    @UserName varchar(50),
    @UserID int output
    as
    begin
       if exists(select 1 from [user] where UserName=@UserName)
       begin
          RAISERROR('用户名存在!', 16, 1)
          return
       end
       
    insert [user](UserName) values(@UserName)
    set @UserID=@@identity
    enddeclare @UserID int
    exec sp_user_insert 'AA', @UserID output
    select UserID=@UserID, ERROR=@@error--result
    /*
    UserID      ERROR       
    ----------- ----------- 
    1           0(1 row(s) affected)
    */declare @UserID int
    exec sp_user_insert 'AA', @UserID output
    select UserID=@UserID, ERROR=@@error--result
    /*
    Server: Msg 50000, Level 16, State 1, Procedure sp_user_insert, Line 8
    用户名存在!
    UserID      ERROR       
    ----------- ----------- 
    NULL        50000(1 row(s) affected)
    */