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. Вы не хотите, чтобы эта транзакция зависла.