我有一个包含 try-catch 块的存储过程。在 catch 块中,我调用 raiserror() 以在某些上下文中重新抛出错误。
我期待如果发生错误,将调用 raiserror() 并且执行将立即从存储过程返回到调用代码。但是,情况似乎并非如此。看起来存储过程的执行一直持续到它遇到 return 语句,然后 raiserror() 生效。
这是正确的吗? raiserror() 在调用 return 或到达存储过程的结尾之前不会生效?
我正在使用 SQL Server 2012。
编辑: 作为对存储过程详细信息请求的回复,以下是相关的代码片段:
DECLARE @ErrMsg VARCHAR(127) = 'Error in stored procedure ' + OBJECT_NAME(@@PROCID) + ': %s';
declare @UpdateDateRecordCount table (LastUpdated datetime, NumberRecords int);
begin try;
insert into @UpdateDateRecordCount (LastUpdated, NumberRecords)
exec sp_ExecuteSql
@UpdateCountQuery,
N'@LastUpdated datetime',
@LastUpdated = @LastUpdated;
if @@rowcount <= 0
begin;
return 0;
end;
end try
begin catch;
declare @InsertError varchar(128) = 'Error getting updated date record count: '
+ ERROR_MESSAGE();
RAISERROR (@ErrMsg, 16, 1, @InsertError);
end catch;
-- Attempt to loop through the records in @UpdateDateRecordCount...
@UpdateCountQuery 参数将设置为:
N'select LastUpdated, count(*) from dbo.Part where LastUpdated > @LastUpdated group by LastUpdated;'