Uma postagem rápida para falar sobre SQL e aproveitar para dizer que tive 2 artigos publicados na SQL Magazine deste mês de Agosto (Edição 78). \o/ hehehehe!!!!
Então... Acabei de me deparar com um problema bobo hoje. Estava criando um procedure que tinha um status do tipo Bit.
Para chamar a procedure passava 0 ou 1... Maravilha!
Entretanto, no sistema no qual a procedure ia ser chamada, poderia listar os ativos, inativos ou os ativos (E) inativos.
Poxa que fácil, basta apenas passar no parâmetro do status o valor NULL.
Vamos ao exemplo:
CREATE PROCEDURE [dbo].[ListarNulo] @Status BIT AS BEGIN SELECT [ParceiroCodigo] ,[CPF] ,[NumMatricula] FROM [ListaBranca] WHERE ([Status] = @Status OR @Status = NULL) END
Poxa, que nada de diferente, pronto acabou! Éééé... não, infelizmente quando rodei a procedure passando NULL no parâmetro... Não me trouxe nada! Mas pq???
Bom, foram 10 minutos revisando a procedure (não era essa acima, era uma maiorzinha) e mas 10 minutos para descobrir e bater a mão na testa dizendo "nossa como eu sou burro".
A frase do que eu precisa me dizia a resposta. "Preciso verificar se o parâmetro (É) nulo." "É" nulo e não "Igual" a Nulo. Vamos alterar a procedure.
ALTER PROCEDURE [dbo].[ListarNulo] @Status BIT AS BEGIN SELECT [ParceiroCodigo] ,[CPF] ,[NumMatricula] FROM [ListaBranca] WHERE ([Status] = @Status OR @Status IS NULL) END
Podemos ver que tirei o igual e coloquei a cláusula IS, apenas para verificar se é nulo. Resolvido! IS um lixo mesmo... Abraços!
1 comentários:
Muito legal, estava com exatamente este problema! Valew
Postar um comentário
Jogue sua opinião na lixeira!