Структура блока выглядит следующим образом:
IF @@ERROR <> 0
BEGIN
ROLLBACK TRANSACTION
RAISERROR('Error occurred in script to update version: transaction rolled back', 182, 4)
END
ELSE
COMMIT
Так что это базовое условие, написанное на t-sql (никакого отношения к java :)).Токены BEGIN
и END
являются просто разделителями и используются точно так же, как {
и }
в java - поэтому они используются в ветви IF (две команды) и не используются в ветви else (одна команда - не обязательно)
Ошибка @@ (и другие переменные, начинающиеся с @@, например @@ ROWCOUNT) - это системные переменные. @@ Error содержит последний код ошибки, заданный командой, и во фрагменте проверяется, все ли в порядке.
При наличии ошибок выполняются два действия
- выдана команда ROLLBACK TRANSACTION , которая отменяет все изменения, внесенные в базу данных (с момента последней операции BEGIN TRANSACTION)
- возникает ошибка no, чтобы сообщить вызывающемуаварийное завершение кода.
Здесь константы (182 и 4) используются для параметров вызова RaiseError @severity и @state.Я подозреваю, что 182 является опечаткой, потому что @severity должен быть числом в диапазоне 0-25, и (по соглашению) 18 используется для «ошибки пользователя с высокой серьезностью».Параметр @state - это просто некоторые данные, которые вы можете добавить к вызову, чтобы различать несколько сообщений об ошибках.
Если ошибок нет, выдается одна COMMIT TRANSACTION , которая делаетвсе изменения (со времени последней НАЧАЛА СДЕЛКИ) постоянны и доступны всем другим пользователям данных.