我想在 SQLServer 中重新引发刚才在 try 块中发生的相同异常。我能够抛出相同的消息,但我想抛出相同的错误。
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
无法做到的。我不想在后端给定制的错误消息。
当我传递 ErrorNo 被抛入 catch 时,RAISEERROR
应该返回下面提到的错误
Msg 2627, Level 14, State 1, Procedure spOTest_DomainInsert,
14号线 违反 UNIQUE KEY 约束‘ UK _ DomainCode’。无法插入 对象中的重复键 “ Tags.tblDomain”。 声明已经被终止了。
编辑:
考虑到存储过程包含多个需要执行的查询,如果我希望在前端处理异常,那么不使用 try catch 块的缺点是什么?