В SQL Server 2008 я знаю, что нет такой вещи, как вложенные транзакции.Они только кажутся существующими.Я также знаю, что некоторые эксперты решительно умоляют разработчиков не использовать доступные псевдо-вложенные транзакции.Например, здесь .
Однако у меня есть случай, когда мне нужно взять XLOCK для строки в определенной вложенной процедуре, но только на время этой процедуры.Это должна быть эта блокировка, и я, очевидно, хочу снять блокировку как можно скорее.В псевдокоде:
...outer procedure
BEGIN TRAN Inner
EXEC InnerProcedure
...InnerProcedure...
BEGIN TRAN Inner
SELECT ... WITH (XLOCK, ROWLOCK)
COMMIT TRAN Inner
-- NEVER rollback here; get the outer procedure to do this
...End InnerProcedure...
COMMIT TRAN Outer
Мои вопросы:
- Является ли это шаблоном передового опыта, учитывая, что SQL Server действительно не вкладывает транзакции?
- Будет лиXLOCK будет выпущен на COMMIT TRAN Inner или только на COMMIT TRAN Outer?Я предполагаю, что ответ - да.