Deletado em 10 de agosto de 2010

SELECT com NULL no MS SQL

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:

Jonathan disse...

Muito legal, estava com exatamente este problema! Valew

Postar um comentário

Jogue sua opinião na lixeira!

Topo