none
[RESOLVIDO] Cláusula AND que para a consulta de uma procedure. RRS feed

  • Pergunta

  • Pessoal, tudo baum?

    Estou fazendo manutenção em uma stored procedure de relatório e, tem uma linha em especial que faz minha consulta não retornar nada:

    AND CONTRATO.referencia LIKE CASE WHEN @referencia = '' THEN CONTRATO.referencia ELSE @referencia END

    Se eu comento essa linha, minha consulta funciona perfeitamente. Tentei muitas maneiras de corrigir essa instrução. Mas não consegui. Alguém tem idéia do que seja?

    Glauco


    quinta-feira, 24 de outubro de 2013 18:34

Respostas

Todas as Respostas

  • Boa tarde,

    Acho que isso pode ocorrer se o parâmetro @referencia é nulo, ou se ele não contem o sinal de '%' e uma linha com a referência igual a que foi passada.

    Espero que ajude.


    Assinatura: http://www.imoveisemexposicao.com.br

    quinta-feira, 24 de outubro de 2013 18:53
  • Então, gapimex, tentei fazer assim:

    AND CONTRATO.referencia LIKE CASE WHEN @referencia = '' THEN ('%%') ELSE @referencia END


    Mas não resolveu. Tentei utilizar a função

    ISNULL(@referencia, '%%')

    Mas não houveram resultados.Será que não tem uma maneira melhor de fazer essa consulta com o like na referência?


    quinta-feira, 24 de outubro de 2013 19:19
  • Experimente fazer um teste dessa forma:

    AND CONTRATO.referencia LIKE '%' + ISNULL(@referencia, '') + '%'

    Espero que ajude.


    Assinatura: http://www.imoveisemexposicao.com.br

    quinta-feira, 24 de outubro de 2013 19:32
  • Glauco,

    Acredito que os valores que você esta tentando filtrar ou fazer uma verificação no seu Case não estão atendendo a necessidade.

    Faça um teste, altere a condição de AND para OR e veja se algum resultado ser apresentado.

    Analise com mais cuidado a condição CASE que você esta fazendo no Like.


    Pedro Antonio Galvão Junior [MVP | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados | SorBR.Net | Professor Universitário | MSIT.com]

    sexta-feira, 25 de outubro de 2013 17:23
  • Pessoal, tudo bem?

    Testei das formas como mostraram acima. Pela lógica, deveria funcionar normalmente. Mas deve ter algo errado aqui na base de dados que impede.

    Consegui fazer de um modo que deu certo, vejam só:

    AND ISNULL(CONTRATO.referencia, '') LIKE CASE WHEN @referencia = '' THEN ISNULL(CONTRATO.referencia, '') ELSE @referencia END

    Apesar de funcionar assim, não acredito que essa seja a melhor forma. Pois demora mais para executar a procedure. Caso alguém tenha alguma idéia, ou mesmo passado por situação parecida, dê uma dica, por favor.

    Glauco

    segunda-feira, 28 de outubro de 2013 13:02
  • José Diz, tudo baum?

    O valor de @referencia é informado na chamada da proc. No entanto, se não for informado valor a esse parâmetro, por padrão do sql server é null, acredito.
    A coluna CONTRATO.referencia pode ter valores null. Tanto que a maioria dos registros estão com esse campo null.
    A declaração está assim:
    @referencia varchar(20),
    Glauco
    segunda-feira, 28 de outubro de 2013 14:48
  • José Diz, bom dia! Tudo baum?

    Quando o parâmetro @referencia não deve agir, ele é passado como '', apenas. E, a rotina é executada da forma: execute dbo.Rotina @referencia=''.

    O parâmetro @referencia contém caracteres curinga em alguns parâmetros. Vou pensar nisso com cuidado. Percebo que há essa necessidade para que a proc não deixe de retornar dados. Por hora a proc voltou a trazer resultados satisfatórios. Vou mexer nisso mais adiante.

    José Diz e pessoal, obrigadíssimo pelas dicas. Todas foram cruciais para me ajudar a encontrar o caminho à resolução deste incidente.

    Glauco


    Glauco

    quarta-feira, 30 de outubro de 2013 14:34