Остановить выполнение, когда ROLLBACK транзакция SQL - PullRequest
0 голосов
/ 06 августа 2010

Есть ли способ прекратить выполнение кода, как только я откатил транзакцию в T-SQL?Например, в приведенном ниже коде я хочу напечатать «Сообщение 1», но не «Сообщение 2».

BEGIN TRANSACTION
GO
PRINT 'Message 1'
ROLLBACK TRANSACTION
GO
PRINT 'Message 2'
GO

Ответы [ 3 ]

5 голосов
/ 06 августа 2010

Оператор GO разделяет пакеты, это означает, что даже если первый из них выдаст ошибку, будет запущен следующий пакет. Я предполагаю (и вы знаете, что это значит ...), что вы пытаетесь обойти, если у вас есть ошибка.

Вы можете посмотреть на GOTO и получить блок обработки ошибок. Или вы можете просто иметь RETURN; однако, это должно быть в пределах того же GO блока

Пример:

GO
  return
  SELECT 'Test 1'
GO
  SELECT 'Test 2'
GO

все равно вернет Тест 2, но не тест 1.

3 голосов
/ 06 августа 2010

В дополнение к заявлениям Майка о ключевом слове GO вы можете попробовать что-то вроде этого

BEGIN TRY
 Begin Transaction
  print 'Message1'
  Select 1/0 --throws error
 Commit Transaction
 print 'Message2'
END TRY
BEGIN CATCH
 rollback transaction
END CATCH
0 голосов
/ 06 августа 2010

Если это SP или подобное, вы можете использовать RETURN

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...