В процедуре я хочу сделать тест, затем Raiserror
, когда это действительно так. Но перед этим я хочу записать ошибку в таблицу. Мой код такой:
CREATE PROCEDURE proc
@val VARCHAR(50)
AS
BEGIN
SET NOCOUNT ON;
SET XACT_ABORT OFF;
DECLARE @test VARCHAR(50)
SELECT @test = test
FROM test_table
WHERE ...
IF @test IS NULL
BEGIN
INSERT INTO log_table VALUES (@val);
RAISERROR ('Invalid value : %i', 16, 1, @val);
END
END
Код компилируется. При выполнении с неверным значением возникает ошибка, но вставка отменяется.
Я пытался включать и выключать xact_abort
и nocount
, но безуспешно.
Я пыталсяинкапсулируя запрос вставки в BEGIN TRANSACTION/COMMIT
, но все равно получая тот же результат.
Что я заметил, мой log_table
, который имеет идентификатор автоинкремента, увеличивается, даже когда эти вставки отменяются.
Как я могу вызвать ошибку, но сохранить запрос на вставку?
Спасибо