有以下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请问这是怎么回事?谢谢
功能:
使用事务 同时新增 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请问这是怎么回事?谢谢
print @@Error --如果有抛出的错误,那这步 @@Error=50000
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)
*/