TSQL Try / Catch внутри транзакции или наоборот?
Я пишу скрипт, который будет удалять записи из ряда таблиц, но перед тем, как удалить, он должен вернуть счетчик для подтверждения пользователем перед фиксацией.
Это краткое изложение сценария.
BEGIN TRANSACTION SCHEDULEDELETE
BEGIN TRY
DELETE -- delete commands full SQL cut out
DELETE -- delete commands full SQL cut out
DELETE -- delete commands full SQL cut out
PRINT 'X rows deleted. Please commit or rollback.' --calculation cut out.
END TRY
BEGIN CATCH
SELECT
ERROR_NUMBER() AS ErrorNumber,
ERROR_SEVERITY() AS ErrorSeverity,
ERROR_STATE() AS ErrorState,
ERROR_PROCEDURE() AS ErrorProcedure,
ERROR_LINE() AS ErrorLine,
ERROR_MESSAGE() AS ErrorMessage
ROLLBACK TRANSACTION SCHEDULEDELETE
PRINT 'Error detected, all changes reversed.'
END CATCH
--COMMIT TRANSACTION SCHEDULEDELETE --Run this if count correct.
--ROLLBACK TRANSACTION SCHEDULEDELETE --Run this if there is any doubt whatsoever.
Это моя первая запись транзакции. Правильно ли / лучше, чтобы блок TRY / CATCH был внутри транзакции, или транзакция должна быть внутри блока TRY?
Важным фактором в этом сценарии является то, что пользователь должен вручную зафиксировать транзакцию.