gpt4 book ai didi

sql-server - TSQL 使触发器静默失败

转载 作者:行者123 更新时间:2023-12-02 20:59:36 26 4
gpt4 key购买 nike

我在插入后触发器中有一些代码可能会失败。此类失败并不重要,不应回滚事务。如何捕获触发器内的错误并让事务的其余部分正常执行?

下面的例子说明了我的意思。触发器故意创建一个错误条件,结果是原始插入 ( "1") 永远不会插入到表中。 Try/Catch 似乎没有起到作用。类似的,older stack overflow question除了“首先防止错误发生”之外,没有给出答案 - 这并不总是可能/容易的。

还有其他想法吗?

create table test 
(
a int not null
);
go

create trigger testTrigger on test
after insert as
begin
insert into test select null;
end;
go

insert into test values ( 1 );

最佳答案

触发器不能在失败的情况下仍使事务前滚。您有几个选项可以确保触发器不会失败。

1 - 您可以通过重复检查约束的逻辑并且不尝试违反约束的操作来确保之后不会失败:

INSERT INTO test WHERE val IS NOT NULL

2 - 您可以通过使用队列设计模式来推迟可能失败的操作,其中可能会或可能不会失败的操作通过排队到排队操作不可能失败的表来排队。

INSERT INTO ACTION_QUEUE (action, parameters) VALUES ('INSERT INTO TEST', val)

关于sql-server - TSQL 使触发器静默失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2162966/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com