У меня есть хранимая процедура, которая должна обрабатывать данные за определенный день и заполнять таблицу истории. Но если данные за этот день уже обработаны, т. Е. Если в таблице истории есть какая-то отдельная строка на эту определенную дату, она должна прерваться:
SET XACT_ABORT ON;
IF EXISTS (
select *
from history_table
where convert(date, call_time) = @date_to_process
)
THROW 50000, N'This day has already been processed. Exiting!', 1;
// process the data ...
// fill the history table
insert into history_table (call_time, other_data)
select call_time, other_data
from #processed_data;
Иногда, когда я вызываю SP с @date_to_process
, который определенно не был обработан ранее, я все равно получаю ошибку " Этот день уже обработан. Выход! ". Но когда я смотрю на таблицу истории, я вижу, что оператор вставки действительно выполнялся. Я сомневаюсь, что эти два заявления работают последовательно. Похоже, оператор INSERT завершает до проверки существования.
Как я могу убедиться, что они работают последовательно?