Usuário com melhor resposta
[RESOLVIDO] Cláusula AND que para a consulta de uma procedure.

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
- Editado Glauco Vinicio Gonçalves Albuquerque quarta-feira, 30 de outubro de 2013 14:36
Respostas
-
Deleted
- Sugerido como Resposta Giovani Cr terça-feira, 29 de outubro de 2013 17:07
- Marcado como Resposta Glauco Vinicio Gonçalves Albuquerque quarta-feira, 30 de outubro de 2013 14:37
segunda-feira, 28 de outubro de 2013 23:39
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
-
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çãoISNULL(@referencia, '%%')
Mas não houveram resultados.Será que não tem uma maneira melhor de fazer essa consulta com o like na referência?
-
Experimente fazer um teste dessa forma:
AND CONTRATO.referencia LIKE '%' + ISNULL(@referencia, '') + '%'
Espero que ajude.
Assinatura: http://www.imoveisemexposicao.com.br
-
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]
-
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
-
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 -
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