quarta-feira, 22 de outubro de 2014

NULLs no SQL SERVER ... detalhes que podem incomodar!

Ao refatorar uma função desenvolvida por um desenvolvedor, me deparei com uma situação onde o COALESCE não estava ajudando a evitar os valores nulos. No caso, foi uma atribuição de valor a uma variável com base em uma query.

Observe o código de teste abaixo:
CREATE TABLE #teste 
  ( 
     codigo INT 
  ) 

DECLARE @codigo INT; 

SELECT @codigo = COALESCE(codigo, 0) 
FROM   #teste 

SELECT @codigo AS [Retornando NULO] 

DROP TABLE #teste 

Se você executar o código acima, perceberá que o resultado é nulo, mesmo usando a função coalesce. No caso, o desenvolvedor resolveu problema adicionando uma verificação com IF verificando testando se a variável está nula.

Isso não está errado, porém acho que devemos diminuir ao máximo fluxos desnecessários de código. Podemos contornar o problema, adicionando o valor padrão na declaração da variável. Desta forma, se a query não retornar nada, a variável mantém o valor original.

CREATE TABLE #teste 
  ( 
     codigo INT 
  ) 

INSERT INTO #teste 
VALUES      (1) 

DECLARE @codigo2 INT = 0; 

SELECT @codigo2 = COALESCE(codigo, 0) 
FROM   #teste 

SELECT @codigo2 AS [Retornando ZERO] 

DROP TABLE #teste 

Check out my new book on MariaDB http://www.amazon.com/dp/B00MQC06HC

Nenhum comentário:

Postar um comentário

Leave your comment here!