【发布时间】:2015-10-22 19:40:09
【问题描述】:
我需要根据某些条件在 Sybase ASE 数据服务器上执行密码重置:
if validations_here
begin
exec sp_password 'sso_passw', 'new_passw', @userid
end
sp_password 可能会引发一些错误,例如10316 - “提供的新密码与之前的密码相同”。虽然我找不到任何文档,但我认为它们不应该是致命错误,应该可以用 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 作为ret_code 和 OK 作为ret_msg(即使sp_password 的参数是错误的)。
如何从我的存储过程中“捕获”sp_password 的错误代码?
【问题讨论】:
-
@MichaelGardner 我不想重置@@error。我想获得引发的错误代码,并防止 SP 异常终止。您提到的问题没有回答我的问题。
-
请重新阅读答案。您不能将 raiseerror 与字符串一起使用。您必须使用 sp_addmessage 作为错误文本。
-
谢谢,我明白你的意思了。由于我的测试不准确,我将使用实际代码编辑问题。
-
这可能也有帮助 - scn.sap.com/thread/3812744
标签: stored-procedures error-handling sybase sap-ase raiserror