Я пытаюсь выкинуть ошибку из хранимой процедуры, которая использует точку сохранения, чтобы вернуться к ней, если она вложена, но никогда не выбрасывается.
Я немного обыскал и нашел только решения(не пробовал их), которые используют RAISERROR, однако в документации Microsoft говорится, что RAISERROR больше не следует использовать, вместо этого следует использовать THROW.
Вот небольшой пример.
CREATE OR ALTER PROC sp_should_throw_error
AS
BEGIN
SET NOCOUNT ON
SET XACT_ABORT OFF
DECLARE @TranCounter INT;
SET @TranCounter = @@TRANCOUNT;
IF @TranCounter > 0
SAVE TRANSACTION ProcedureSave;
ELSE
BEGIN TRANSACTION;
BEGIN TRY
THROW 50001, 'Spitted out an error.', 1
IF @TranCounter = 0
COMMIT TRANSACTION;
END TRY
BEGIN CATCH
IF @TranCounter = 0 ROLLBACK TRANSACTION;
ELSE IF XACT_STATE() <> -1 ROLLBACK TRANSACTION ProcedureSave;
END CATCH
END
EXEC sp_should_throw_error
Я надеюсь, что кто-нибудь может указать мне, что я делаю здесь неправильно.Почему ошибка никогда не выдается?