SQL Server: блокировка таблицы во время всей хранимой процедуры

У меня есть потоковое проглатывание в моем промежуточном столе. Каждые 5 минут я выполняю хранимую процедуру, чтобы вставить / обновить все данные из этой промежуточной таблицы в мой final Таблица.

Процесс хранимой процедуры:

BEGIN
 - UPDATE RECORDS IN FINAL TABLE FROM STAGING TABLE
 - INSERT RECORDS IN FINAL TABLE FROM STAGING TABLE
 - TRUNCATE STAGING TABLE
HERE I WANT TO RELEASE THE LOCK
END

Любая идея, как я могу точно сказать, что я хочу заблокировать промежуточную таблицу для вставок, пока я не урезал ее?

1 ответ

Вы можете выполнить эти сценарии в блоке транзакций следующим образом;

BEGIN
 BEGIN TRANSACTION
 - UPDATE RECORDS IN FINAL TABLE FROM STAGING TABLE
 - INSERT RECORDS IN FINAL TABLE FROM STAGING TABLE
 - TRUNCATE STAGING TABLE
 COMMIT TRANSACTION
HERE I WANT TO RELEASE THE LOCK
END

Другие транзакции будут ожидать завершения вашей транзакции блока. И вы должны создать блок try/catch для обработки ошибок. Если сценарий приветствуется с ошибкой, вы должны ROLLBACK TRANSACTION в блоке улова. Потому что, если транзакция запускается, она должна быть завершена как COMMIT или ROLLBACK. Вы не хотите, чтобы эта транзакция зависла.

Другие вопросы по тегам