【发布时间】:2019-10-01 14:02:31
【问题描述】:
在一个程序中,我想在实际情况下进行测试然后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 具有自动递增 ID,即使在取消这些插入时也会递增。
如何引发错误但仍保留插入请求?
谢谢
【问题讨论】:
-
无复制。该值出现在表中。您是否有启动和回滚事务的客户端代码?
-
你是对的。检查我的答案
标签: sql-server tsql sql-server-2012