For the stored procedure that is executed by the SQL Agent (i.e., the scheduler), you might have to prevent the same stored procedure run more than once.
Allow re-entrant
Not all processes allow to run more than once. For example, the
stored procedure that is responsible for generating monthly statement.
Another example is the stored procedure that is generating the exception
report.
Why re-entrant
In the development phase, you might want to run the stored procedure as many time as possible so that you can fine tune and debug the process. But, once these stored procedures go live, it will run once for the day, week, month or whatever predefined date.
Now, how to prevent re-entrant
In order to prevent the stored procedure to run more than once for a day, you need to have a condition to check the log table. In our example, the "tb_whatever_process_log" table is keeping track the process date.
if exists(
select *
from tb_whatever_process_log
where
process_date = cast(convert(nvarchar, getdate(), 102) as datetime)
)
begin
print 'Already done. Exit'
set nocount off
return
end
(... continue with the actual process..)
How to test this stored procedure?
Due to the re-entrant prevention condition, you will find it almost like no way to test out the stored procedure during the development phase. An easiest way to do this is to add a new parameter to the stored procedure call "@debug_mode int = 0". In the development phase, you will have to specify the "@debug_mode = 1".
No comments:
Post a Comment