Реализация каскадных хранимых процедур в SQL Server 2008

#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