Почему Raiserror не вызывается? - PullRequest
0 голосов
/ 13 октября 2018

Если у меня есть этот блок внутри транзакции:

Begin Try
  Begin Transaction tran


    Declare @ExpiryDate varchar(100)
        Set @ExpiryDate= (Select NewExpiryDate from NIT n where n.NITNo= @NitNo)
        IF(CONVERT(DATE,@ExpiryDate)) < convert(date,getdate())
        Begin
                RAISERROR('error occurred', 16,1);
                return;
        End

  Commit Transaction tran
End Try
Begin Catch
                select ERROR_MESSAGE()

                Rollback transaction tran1
End Catch

... он достигает блока catch, но ошибка не возникает.Это никогда не бросает ошибку.Почему?

1 Ответ

0 голосов
/ 13 октября 2018

Я бы переписал это как:

Begin Try
  Begin Transaction tran;

  Declare @ExpiryDate DATE =(Select NewExpiryDate from NIT where n.NITNo= @NitNo);

  IF @ExpiryDate < convert(date,getdate())
      RAISERROR('error occurred', 16,1);

  Commit Transaction tran;
End Try
Begin Catch
   IF @@TRANCOUNT > 0 Rollback transaction tran1;
   THROW;  -- rethrowing error
End Catch
...