Sql 手动捕获异常时是否可能引发系统异常?

Sql 手动捕获异常时是否可能引发系统异常?,sql,database,tsql,exception-handling,sqlexception,Sql,Database,Tsql,Exception Handling,Sqlexception,我正在编写一个使用try-catch块的存储过程 现在我在表中有了一个唯一的列。当我尝试插入重复值时,它抛出异常,异常号为2627 我想这样做 如果存在,请从tblABC中选择*,其中col1='value'=true raiseError2627 raise系统错误,若我使用insert查询插入重复值,则会引发该错误 编辑: 我使用的事务在处理异常时得到回滚,因此导致在异常发生之前的查询中执行的@标识值增加 我想检查所有可能发生的异常。为此,我将使用select语句和if else检查可能手动

我正在编写一个使用try-catch块的存储过程

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

我想这样做

如果存在,请从tblABC中选择*,其中col1='value'=true raiseError2627 raise系统错误,若我使用insert查询插入重复值,则会引发该错误

编辑:

我使用的事务在处理异常时得到回滚,因此导致在异常发生之前的查询中执行的@标识值增加

我想检查所有可能发生的异常。为此,我将使用select语句和if else检查可能手动引发错误的异常。在这里,我将能够捕获唯一密钥冲突,但不会发生异常,所以我将在这里故意抛出异常,但我想要的异常应该是系统异常,即错误2627

使用哪种方法会更好 插入查询或检查重复项 使用“选择”插入前的值 询问

是否有可能提高系统的可靠性 捕获异常时发生异常 手动地,即抛出SQL将抛出的相同异常


您不能引发系统错误。提高2627。。。这是违法的。除了撒谎没有发生错误2627之外,还缺少消息格式中的插入

应用程序永远不应该依赖于身份连续性,您抱怨它“增加了自动增量”这一事实表明您的应用程序在设计上肯定存在缺陷,如果不是在代码中的话。标识值可能包含间隙,这是其规范的一部分


至于什么更好,插入和捕获,或者尝试更新:这取决于你的流行模式。如果该值可能存在,则更新优先策略更好。如果该值可能不存在或概率未知,出于性能考虑,最好插入并捕获错误,更重要的是,正确性选择检查在并发情况下永远不正确。

@Remus Plz请回答我的编辑。请原谅我没有获得关于我的问题的描述性信息。编辑后,我的帖子不需要任何更新。一切正常。T-SQL的TRY/CATCH中没有重新抛出语义。您必须抛出自定义类型的新异常,即错误代码超过50000。这很混乱,但这是T-SQL异常处理的最新技术。