Jump to content
Fórum Script Brasil
  • 0

Recuperar Erro De Procedure


Guest --Reinaldo --
 Share

Question

Guest --Reinaldo --

O problema é o seguinte, tenho uma procedure que apresenta um Erro de Check Constraint.

Quero guardar o erro da constraint para poder validar, sendo que estou montando um script de automação de testes do SQL usando TSQLUnit e gostaria de poder capturar esses erros.

Exemplo:

EXEC pr_CalculaMedia

Supondo que esta insira valor numa tabela e retorne para mim um erro de Constraint tipo:

Msg 547, Level 16, State 0, Procedure pr_CalculaMedia, Line 33

INSERT statement conflicted with COLUMN CHECK constraint 'CK_TB_MEDIA'. The conflict occurred in database 'BD', table 'tb_valor_calculo', column 'num_calculo'.

Como posso recuperar esta mensagem de erro numa variável a partir da chamada da procedure??

Exemplo:

DECLARE @erro varchar (5000)

EXEC @erro = pr_CalculaMedia

SELECT @erro

Sei que isso não funciona, mas gostaria de saber algo que funcione!

Att,

Reinaldo.

Link to comment
Share on other sites

4 answers to this question

Recommended Posts

  • 0
Guest --Gesiel --

Reinaldo,

o ideal é que o erro 'nunca' ocorra, e para isto você pode testar antes de tentar gravar o registro:

create procedure insere_linha_spi

@valor int

as

--testa se registro ainda não existe

if not exists(select 'x' from tabela_tb where valor = @valor)

begin

--insere registro

insert into tabela_tb(valor) values (@valor)

end

else

begin

insert into tabela_de_duplicados_tb(tabela, campo, valor) values ('tabela_tb','valor',@valor)

end

Mas, se realmente você quer tratar os erros e, por exempo, gravar o log numa tabela qualquer, pode fazer assim:

create procedure insere_linha_spi

@valor int

as

begin try

--tenta inserir registro na tabela

insert into tabela_tb(valor) values (@valor)

end try

begin catch

-- grava log de erro

insert into tabela_de_log_tb(tabela, campo, valor, numero_erro) values ('tabela_tb','valor',@valor, @@error)

end catch

Link to comment
Share on other sites

  • 0
Guest Reinaldo Coelho Sartorelli

Primeiramente, muito obrigado pela ajuda...

Vou tentar explicar melhor meu problema...

Eu utilizo o MSSQL2000 e estou testando o TSQLUnit(http://tsqlunit.sourceforge.net/) para criar testes unitários na base de dados MSSQL.

Eu fiz alguns testes simples e ele atendeu bem...

Minha dúvida agora é se consigo testar as constraints por exemplo...

Pensei em fazer isso executando um comando que Quebre a constraint para que eu possa conferir a mensagem de erro...

Meu problema tem sido para conseguir pegar a mensagem ou número do erro, pois a variavel @@error não é carregada para erros de constraint, ela simplesmente é ignorada e a mensagem de erro é exibida em tela...

Não se consegui ser mais claro...

Agradeço a ajuda.

Reinaldo.

Link to comment
Share on other sites

  • 0
Guest --Gesiel --

Reinaldo,

não conheço a TSQLUnit, mas na maioria das linguagens de programação existem tratamento de erro, então você poderia capturar no código o erro e a sua descrição vindo banco de dados.

Link to comment
Share on other sites

  • 0
Guest Reinaldo Coelho Sartorelli

Ok, o TSQLUnit é criado na própria TSql, desta forma não temos um tratamento de erro tão robusto.

Muito obrigado pelas informações :-)

Grato,

Reinaldo.

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share

  • Forum Statistics

    • Total Topics
      149.8k
    • Total Posts
      646.6k
×
×
  • Create New...