gpt4 book ai didi

sql - 如何在 SQL Server 中重新抛出相同的异常

转载 作者:太空狗 更新时间:2023-10-30 01:37:24 24 4
gpt4 key购买 nike

我想在 SQL Server 中重新抛出刚刚在我的 try block 中发生的相同异常。我能够抛出相同的消息,但我想抛出相同的错误。

BEGIN TRANSACTION
BEGIN TRY
INSERT INTO Tags.tblDomain (DomainName, SubDomainId, DomainCode, Description)
VALUES(@DomainName, @SubDomainId, @DomainCode, @Description)
COMMIT TRANSACTION
END TRY

BEGIN CATCH
declare @severity int;
declare @state int;

select @severity=error_severity(), @state=error_state();

RAISERROR(@@Error,@ErrorSeverity,@state);
ROLLBACK TRANSACTION
END CATCH

RAISERROR(@@Error, @ErrorSeverity, @state);

这一行会显示错误,但我想要类似的功能。这会引发错误编号 50000 的错误,但我希望抛出我传递的错误编号 @@error,

我想在前端捕获这个错误。

catch (SqlException ex)
{
if ex.number==2627
MessageBox.show("Duplicate value cannot be inserted");
}

我想要这个功能。使用 raiseerror 无法实现。我不想在后端提供自定义错误消息。

RAISEERROR 当我将 ErrorNo 传递给 catch 时应该返回下面提到的错误

Msg 2627, Level 14, State 1, Procedure spOTest_DomainInsert,

Line 14Violation of UNIQUE KEY constraint 'UK_DomainCode'. Cannot insertduplicate key in object'Tags.tblDomain'.The statement has been terminated.

编辑:

考虑到存储过程包含多个需要执行的查询,如果我希望在前端处理异常,那么不使用 try catch block 的缺点是什么?

最佳答案

SQL 2012 引入了 throw 语句:

http://msdn.microsoft.com/en-us/library/ee677615.aspx

If the THROW statement is specified without parameters, it must appear inside a CATCH block. This causes the caught exception to be raised.

BEGIN TRY
BEGIN TRANSACTION
...
COMMIT TRANSACTION
END TRY
BEGIN CATCH
ROLLBACK TRANSACTION;
THROW
END CATCH

关于sql - 如何在 SQL Server 中重新抛出相同的异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2481273/

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