Ir para conteúdo
Fórum Script Brasil
  • 0

Recuperar Erro De Procedure


Guest --Reinaldo --

Pergunta

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 para o comentário
Compartilhar em outros sites

4 respostass a esta questão

Posts Recomendados

  • 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 para o comentário
Compartilhar em outros 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 para o comentário
Compartilhar em outros 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 para o comentário
Compartilhar em outros 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 para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152k
    • Posts
      651,8k
×
×
  • Criar Novo...