У меня есть требование запретить вставку в таблицу после вставки, основываясь на определенных условиях.Когда я вызываю оператор вставки напрямую, он выполняется без проблем.Принимая во внимание, что, когда я использую процедуру для оператора вставки с областью транзакции, я получаю эту ошибку
Запрос ROLLBACK TRANSACTION не имеет соответствующей BEGIN TRANSACTION.
Мой код:
create table test
(
id int ,
name varchar(10)
)
create table test1
(
id int ,
name varchar(10)
)
ALTER PROCEDURE test_insert
@id INT, @name NVARCHAR(10)
AS
BEGIN
BEGIN TRY
BEGIN TRANSACTION
INSERT INTO test1 (id, name)
VALUES (@id, @name)
INSERT INTO test (id, name)
VALUES (@id, @name)
COMMIT
END TRY
BEGIN CATCH
ROLLBACK;
DECLARE @errormsg NVARCHAR(MAX)
SELECT @errormsg = ERROR_MESSAGE();
THROW 500001, @errormsg, 1;
END CATCH
end
ALTER TRIGGER TRG_test
ON dbo.test
AFTER INSERT AS
BEGIN
DECLARE @idNum INT
SELECT @idNum = id FROM inserted
IF @idNum = 1
BEGIN
RAISERROR('error', 1,1);
ROLLBACK TRANSACTION
RETURN
END
END
Пожалуйста, дайте мне знать, если мне что-то не хватает