Вы можете использовать блоки TRY CATCH для обработки ошибок.Как правило, вы можете использовать следующий шаблон:
BEGIN TRY
BEGIN TRANSACTION;
-- CODE BLOCK GOES HERE
COMMIT TRANSACTION;
END TRY
BEGIN CATCH;
IF @@TRANCOUNT > 0
BEGIN
ROLLBACK TRANSACTION;
END;
-- GET ERRORS DETAILS OR THROW ERROR
END CATCH;
Если вы не используете TRANSACTION
, он будет выглядеть следующим образом:
BEGIN TRY
-- CODE BLOCK GOES HERE
END TRY
BEGIN CATCH;
-- GET ERRORS DETAILS OR THROW ERROR
END CATCH;
В блоке CATCH
выможно получить подробную информацию об ошибках, используя некоторые встроенные функции.Например:
BEGIN TRY
-- Generate a divide-by-zero error.
SELECT 1/0;
END TRY
BEGIN CATCH
SELECT
ERROR_NUMBER() AS ErrorNumber
,ERROR_SEVERITY() AS ErrorSeverity
,ERROR_STATE() AS ErrorState
,ERROR_PROCEDURE() AS ErrorProcedure
,ERROR_LINE() AS ErrorLine
,ERROR_MESSAGE() AS ErrorMessage;
END CATCH;
GO
Затем, основываясь на этих деталях, вы можете что-то сделать (записать ошибку, ничего не делать, сохранить сведения об ошибке в переменной и передать их во внешнюю подпрограмму, сгенерировать ту же ошибку, используя THROW или снова с помощью THROW
- создайте свой собственный THROW 51000, 'My Custom error message.', 1;
.