#sql-server
#sql-сервер
Вопрос:
Как я могу поддерживать транзакции через каскадные хранимые процедуры?
Я использую SQL Server 2008.
Комментарии:
1. Вы имеете в виду, что sp1 вызывает sp2 или sp1 делает что-то, что вызывает каскад запуска?
2. да, это похоже на это.
Ответ №1:
Вы можете обернуть все это в транзакцию, и это будет работать, но вы должны убедиться, что ВСЕ ваши дочерние / вложенные хранимые процедуры будут откатывать транзакцию, иначе вы вызовете взаимоблокировку. Что-то вроде этого:
Create procedure [dbo].[parent]
as
Begin Transaction
Begin Try
Exec Child
End Try
Begin Catch
If @@Trancount > 0
RollBack
End Catch
Commit
Create procedure [dbo].[Child]
as
Begin Transaction
Begin Try
--Do inserts here
End Try
Begin Catch
If @@Trancount > 0
RollBack
RAISERROR('Error Occured',16,1)
End Catch
Commit