gpt4 book ai didi

sql - 是否有可能在手动捕获异常时引发系统异常?

转载 作者:搜寻专家 更新时间:2023-10-30 23:23:53 25 4
gpt4 key购买 nike

我正在编写一个存储过程,其中我使用了 try catch block 。

现在我在表中有一个唯一的列。当我尝试插入重复值时,它抛出异常,异常号为 2627。

我想要这样来完成

if (exists(select * from tblABC where col1='value')=true)raiseError(2627)——引发系统错误,如果我使用插入查询插入重复值,则会抛出此错误

编辑:

我正在使用在处理异常时回滚的事务,因此导致在先前查询中执行的 @@Identity 值增加 b4 发生异常。

我想检查 b4 实际插入时可能发生的所有此类异常。为此,我将使用带有 if else 的 select 语句检查可能引发错误的异常。在这里我将能够捕获唯一键违规但不会发生异常所以我会在这里故意抛出异常但我想要的异常应该是系统异常即错误 2627

And which method will be better, using insert query or checking for duplicate value before insertion using Select query ?

IS IT POSSIBLE ANYHOW TO RAISE SYSTEM EXCEPTION ON CATCHING EXCEPTION MANUALLY i.e THROWING SAME EXCEPTION THAT SQL WOULD HAVE THROWN

最佳答案

您不能引发系统错误。 RAISERROR(2627...) 是非法的。除了您在撒谎这一事实(没有发生错误 2627)之外,您还缺少对消息格式的插入。

应用程序永远不应该依赖于 IDENTITY 连续性,您提示它“增加了自动增量”这一事实表明您的应用程序存在错误(如果不是在代码中,那肯定是在设计中)。 IDENTITY 值可能包含间隙,是其规范的一部分。

至于什么更好,是插入和捕获,还是尝试更新:这取决于您的流行模式。如果该值可能存在,则 UPDATE first 策略更好。如果该值可能不存在或者如果概率未知,出于性能原因,更重要的是正确性(SELECT 检查在并发下永远不会正确),最好插入并捕获错误.

关于sql - 是否有可能在手动捕获异常时引发系统异常?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2450519/

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