Quero relançar a mesma exceção no SQL Server que acabou de ocorrer no meu bloco try. Consigo lançar a mesma mensagem, mas desejo lançar o mesmo erro.
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);
Esta linha mostrará erro, mas eu quero uma funcionalidade parecida com isso. Isso gera um erro com o número de erro 50000, mas quero que seja emitido o número do erro que estou passando @@error
,
Eu quero capturar esse erro não no frontend.
ie
catch (SqlException ex)
{
if ex.number==2627
MessageBox.show("Duplicate value cannot be inserted");
}
Eu quero essa funcionalidade. que não pode ser alcançado usando raiseerror
. Não quero dar mensagem de erro personalizada no back-end.
RAISEERROR
deve retornar o erro mencionado abaixo quando eu passar ErrorNo para ser lançado em catch
Msg 2627, Level 14, State 1, Procedure spOTest_DomainInsert,
Linha 14 violação da restrição UNIQUE KEY 'UK_DomainCode'. Não é possível inserir uma chave duplicada no objeto 'Tags.tblDomain'. A instrução foi encerrada.
EDITAR:
Qual pode ser a desvantagem de não usar o bloco try catch se eu quiser que a exceção seja tratada no front-end, considerando que o procedimento armazenado contém várias consultas que precisam ser executadas?
raiserror
, o que é diferente de como c # sai após athrow
. Então, adicionei umreturn
dentro docatch
porque queria corresponder a esse comportamento.