Usuário com melhor resposta
Ajuda com function - trazer todos os registros independente da busca

Pergunta
-
Bom dia!
Pessoal eu tenho uma function, que eu envio 3 parametros de busca.
Porém, existe um caso... que esta me complicando um pouco e depois de tanto tentar, resolvi pedir ajuda.
Eu coloco como paramento ano, empresa e centro de custo.
Tudo funciona bem com ano e empresa, porém, o centro de custo não é sempre obrigatório para buscar.
Dessa forma:
select Valor, CentroCusto from Rotinas where ano=@ano and Empresa=@Empresa and CentroCusto = @centroCusto
Funciona bem, quando eu envio o parametro para trazer por centro de custo, mas, pode ocorrer que eu queira trazer todos os valores independente do centro de custo, só que eu queria aproveitar a mesma function não queria criar outra.
Sei que tem esse tipo de forma para resolver (caso houvesse um valor default):
select Valor, CentroCusto from Rotinas where ano=@ano and Empresa=@Empresa and (CentroCusto = @centroCusto or @centroCusto = '0')
Porém, não vi como seria trazer todos independente do centroCusto (existindo um valor ou não).
Alguém tem uma sugestão?
Respostas
-
Paulo,
Você está passando o valor do @CentroCusto como vazio e não como null.
Experimente passar Ex: select * from FN_FECHAMENTO_MES('2018','01','NULL) ou mudar a lógica da function para tratar o vazio e não o null.
Mariana Del Nero /* Se a resposta foi útil, não esqueça de marcá-la */
- Marcado como Resposta Paulo.Sérgio terça-feira, 2 de outubro de 2018 14:24
Todas as Respostas
-
Olá Paulo,
Você pode usar dessa maneira:
select Valor, CentroCusto from Rotinas where ano=@ano and Empresa=@Empresa and (CentroCusto = @centroCusto or @centroCusto IS NULL)
Se você passar um valor, ele cai no 'CentroCusto = @CentroCusto'. Se não passar ele cai no OR
Lembrando que apesar de ser factível, você precisa analisar performance disso ok? O 'OR' nem sempre é um bom amigo.. rs
Espero ter ajudado!Mariana Del Nero /* Se a resposta foi útil, não esqueça de marcá-la */
-
Primeiramente, muito obrigado pela ajuda!
EU testei, se eu colocar um valor no centro de custo, ele traz corretamente.
Ex: select * from FN_FECHAMENTO_MES('2018','01','02')
Porém, se eu envio sem nada:
Ex: select * from FN_FECHAMENTO_MES('2018','01','')
Ele não traz nada.O engraçado é que se eu coloco :
select Valor, CentroCusto from Rotinas where ano=@ano and Empresa=@Empresa and (CentroCusto = @centroCusto or @centroCusto IS NOT NULL)
O comportamento é ao contrário, se enviar o centro de custo, não retorna nada.
Se não enviar o centro de custo, ele retorna tudo.
O que será que esta errado na lógica?
-
Paulo,
Você está passando o valor do @CentroCusto como vazio e não como null.
Experimente passar Ex: select * from FN_FECHAMENTO_MES('2018','01','NULL) ou mudar a lógica da function para tratar o vazio e não o null.
Mariana Del Nero /* Se a resposta foi útil, não esqueça de marcá-la */
- Marcado como Resposta Paulo.Sérgio terça-feira, 2 de outubro de 2018 14:24
-
-