我需要根据某些条件在 Sybase ASE 数据服务器上执行密码重置:
if validations_here
begin
exec sp_password 'sso_passw', 'new_passw', @userid
end
sp_password
可能会引发一些错误,例如10316 - "New password provided is the same as the previous password"。虽然我找不到任何文档,但我认为它们不应该是致命错误,应该可以用raiserror
.
由于调用者以这种方式处理它会更容易,我想获取错误代码并将其作为结果集的一部分返回,所以我考虑选择@@error。我的代码如下(我只转录了我认为与问题相关的部分):
create procedure sp_desbloc_blanqueo_usr
@userid sysname,
@sso_pass varchar(20),
@new_pass varchar(20)
as
begin
declare @ret_code int
declare @ret_msg varchar(100)
declare @myerror int
select @ret_code = 0, @ret_msg = 'OK'
exec sp_password @sso_pass, @new_pass, @userid
set @myerror = @@error
if @myerror <> 0
begin
select @ret_code = @myerror, @ret_msg = 'Error occurred changing password'
-- It would be nice to have the actual error message as well
goto fin
end
fin:
select @ret_code as ret_code, @ret_msg as ret_msg
end
但是,每当我执行存储过程时,我都会得到 0 asret_code
和 OK as ret_msg
(即使参数sp_password
错误)。
如何sp_password
从存储过程中“捕获”错误代码?