Member 14800672 Ответов: 2

Количество транзакций после выполнения указывает на несоответствие числа операторов BEGIN и COMMIT.


Я получаю эту ошибку

Transaction count after EXECUTE indicates a mismatching number of BEGIN and COMMIT statements. Previous count = 1, current count = 0.\r\nTransaction count after EXECUTE indicates a mismatching number of BEGIN and COMMIT statements. Previous count = 1, current count = 0


Что я уже пробовал:

create PROCEDURE [dbo].[sp]
	@Id1 int
	,@BBId int
        ,@Text nvarchar(100) =''
AS
Begin
  
	Begin transaction
	        declare @Id int
            
		INSERT INTO table1 
		select @Text where @Text <> ''

		SET @Id = SCOPE_IDENTITY()

		INSERT INTO table2 (Id1, @Id)
			select @Id1,@Id from table3
			where table3.BBId = @BBId AND table3.Flag= 0 and 
                        table3.Id1 = @Id1
		if(@@rowcount>0)
		begin
		        UPDATE    table3
			SET       Flag= 1
			WHERE   
				 table3.BBId = @BBID 
				AND table3.Id1 = @Id1
	       COMMIT TRANSACTION
        end
        else
        rollback transaction
  
END
Return 0

2 Ответов

Рейтинг:
1

Jörgen Andersson

Вам нужно отменить оператор IF и зафиксировать его в конце транзакции.


Рейтинг:
0

OriginalGriff

Без ваших данных и возможности запустить ваш SP против них мы ничего не можем сделать: лучше всего предположить, что что-то там вызывает исключение, и поскольку вы не используете TRY ... CATCH блок вообще ни откат, ни фиксация не выполняются.

Попробуйте добавить обработку ошибок и посмотреть, улучшится ли она.


Member 14800672

Привет OriginalGriff,

эта ошибка возникает, когда она достигает else ( я имею в виду, если @@rowCount меньше 0)
Я попытался добавить try and catch в код ниже, но все та же ошибка. Есть идеи?

создайте процедуру [dbo].[sp]
@Id1 int
,@BBId int
,@Text nvarchar(100) ="
АС
Начать
начинайте пробовать

Начать транзакцию
объявить @Id int

Вставить в таблицу 1
выберите @Text, где @Text <> "

Набор @идентификатор = функция scope_identity()

Вставить в таблицу 2 (Id1, @Id)
выберите @Id1,@Id из таблицы 3
где табл. 3.BBId = @BBId и table3.Flag= 0 и
Таблица 3.Id1 = @Id1
if(@@rowcount>0)
начать
Обновление таблицы 3
Установить флаг= 1
ГДЕ
Таблица 3.BBId = @BBID
И table3.Id1 = @Id1
СОВЕРШЕНИЮ СДЕЛКИ
конец
еще
инструкция ROLLBACK Transaction
конец попытки
начинай ловить
ВЫБЕРИТЕ ФУНКЦИЯ ERROR_MESSAGE()

ОТМЕНА

концевая задвижка

КОНЕЦ
Возвращает 0