none
Personalizar erros no sql server RRS feed

  • Pergunta

  • tenho a seguinte stored procedure

     

     

    Code Snippet

    CREATE PROCEDURE dbo.stp_incluir_dados
    @Ind1 VARCHAR(20),
    @Ind2 VARCHAR(20),
    @CodTradeType VARCHAR(10),
    @Sinal INT,
    @Westminster VARCHAR(1),
    @Retorno INT OUTPUT

    AS

     SET NOCOUNT ON

     IF NOT EXISTS(SELECT cod_Trade_Type FROM ils_cad_trade_type WHERE Ind1 LIKE @Ind1 AND Ind2 LIKE @Ind2)
     AND NOT EXISTS(SELECT cod_Trade_Type FROM ils_cad_trade_type WHERE cod_Trade_Type = @CodTradeType)
     BEGIN
      INSERT INTO ils_cad_trade_type
      (
       Ind1,
       Ind2,
       cod_Trade_Type,
       Sinal,
       Westminster
      )
      VALUES
      (
       @Ind1,
       @Ind2,
       @CodTradeType,
       @Sinal,
       @Westminster
      )
     END

    ELSE

    BEGIN

        'Erro 1

    END

     IF (@Sinal = 1)
       SET @Sinal = -1
     ELSE
       SET @Sinal = 1

     

     IF NOT EXISTS(SELECT cod_Trade_Type FROM ils_cad_trade_type WHERE Ind1 LIKE @Ind2 AND Ind2 LIKE @Ind1)
     AND NOT EXISTS(SELECT cod_Trade_Type FROM ils_cad_trade_type WHERE cod_Trade_Type LIKE @CodTradeType)
     BEGIN
      INSERT INTO ils_cad_trade_type
      (
       Ind1,
       Ind2,
       cod_Trade_Type,
       Sinal,
       Westminster
      )
      VALUES
      (
       @Ind2,
       @Ind1,
       @CodTradeType,
       @Sinal,
       @Westminster  
      )
     END

    ELSE

    BEGIN

       'Erro 2

    END

     IF (@@ERROR <> 0 OR @@ROWCOUNT = 0)
      SET @Retorno = -10
     ELSE
      SET @Retorno = 10

    GO

     

     

    gostaria de fazer o seguinte:

    na primeira condição se ela for falsa então disparar o Erro 1

    e na segunda se ela for falsa disparar o Erro2, onde eu consiga recuperar essas mensagens ou códigos(como eu estou fazendo com a variável @Retorno) de erro para eu exiber em um alert na aplicação.

    terça-feira, 8 de julho de 2008 19:20

Respostas

  • Boa Tarde,

     

    Seria interessante que ao invés de você tratá-las como "erros" você as considerasse fluxos de aplicação, ou seja, determinadas condições (que não necessariamente são erros) foram atendidas. No código "Erro 1", você criaria determinadas variáveis, atribuiria valores de "erro" para essas variáveis e dispararia essas variáveis para a aplicação seja através de um ResultSet (SELECT), através de um parâmetro (Output Parameter) ou através de um retorno (RETURN).

     

    Não é interessante nem performático, tratar fluxos como erros. O lançamento de exceções é mais onerosos que simples IFs e ELSEs.

     

    [ ]s,

     

    Gustavo

     

    terça-feira, 8 de julho de 2008 19:27
  • Fernando,

     

    Neste caso você poderia criar uma stored procedure com parâmetros de saída de valores, sendo estes valores repassados para sua aplicação, e dentro da aplicação fazer os tratamentos.

     

     

    terça-feira, 8 de julho de 2008 19:51

Todas as Respostas

  • Boa Tarde,

     

    Seria interessante que ao invés de você tratá-las como "erros" você as considerasse fluxos de aplicação, ou seja, determinadas condições (que não necessariamente são erros) foram atendidas. No código "Erro 1", você criaria determinadas variáveis, atribuiria valores de "erro" para essas variáveis e dispararia essas variáveis para a aplicação seja através de um ResultSet (SELECT), através de um parâmetro (Output Parameter) ou através de um retorno (RETURN).

     

    Não é interessante nem performático, tratar fluxos como erros. O lançamento de exceções é mais onerosos que simples IFs e ELSEs.

     

    [ ]s,

     

    Gustavo

     

    terça-feira, 8 de julho de 2008 19:27
  • Fernando,

     

    Quando você se refere a personalizar os erros, o que você esta querendo?

     

    Que tipo de personalização, seria mensagem de erro?

    terça-feira, 8 de julho de 2008 19:36
  • Eu estava pensando em atribuir um número à uma variável e retornar essa variavel para a aplicação onde eu verificaria o número do erro e exibiria uma mensagem informando ao usuário que por exemplo o registro q ele está querendo incluir já existe no banco de dados;

    terça-feira, 8 de julho de 2008 19:41
  • Fernando,

     

    Neste caso você poderia criar uma stored procedure com parâmetros de saída de valores, sendo estes valores repassados para sua aplicação, e dentro da aplicação fazer os tratamentos.

     

     

    terça-feira, 8 de julho de 2008 19:51
  • Boa Tarde,

     

    Qual a sua plataforma de desenvolvimento ?

     

    [ ]s,

     

    Gustavo

     

    terça-feira, 8 de julho de 2008 19:55
  • estou usando asp.net 2.0 com vb.net e sql server 2000;

    terça-feira, 8 de julho de 2008 19:59
  • Fernando,

     

    Então criando a procedure você poderia fazer a chamada dela dentro da sua aplicação e passar os valores!!!

    terça-feira, 8 de julho de 2008 20:03
  • Vou fazer isso.

     

    Obrigado pela ajuda pessoal!!!!

    terça-feira, 8 de julho de 2008 20:11
  • Olá Fernando,

     

    Verifique o Books OnLine para ver a utilização de Stored Procedures com parâmetros de saída.

    Consulte a ajuda do .NET para aprender a utilizar o objeto SqlCommand com a coleção Parameters

     

    [ ]s,

     

    Gustavo

    terça-feira, 8 de julho de 2008 20:33