SR0007: Use ISNULL (coluna, default_value) em colunas anuláveis em expressões

RuleId

SR0007

<strong>Categoria</strong>

Microsoft.Performance

Alteração significativa

Não-separável

Causa

Uma função ISNULL não foi usada em uma expressão de comparação onde uma coluna pode conter um valor nulo.

Descrição da regra

Se o seu código compara dois valores de nulo ou um valor nulo com qualquer outro valor, o seu código retornará um resultado desconhecido.

Como corrigir violações

Você deve indicar explicitamente como tratar valores nulos em expressões de comparação por quebra automática de cada coluna que pode conter um valor nulo em uma função ISNULL.

Quando suprimir avisos

Como os resultados da comparação são indeterminados, você não deve suprimir este aviso.

Exemplo

Este exemplo mostra uma definição de tabela simples e dois procedimentos armazenados. A tabela contém uma coluna, c2, que pode conter um valor nulo. O primeiro procedimento [ProcedureWithWarning] [c2] se compara a um valor constante. O segundo procedimento corrige o problema encapsulando [c2] com uma chamada para a função ISNULL.

CREATE TABLE [dbo].[Table1]
( 
[ID] INT NOT NULL IDENTITY(0, 1), 
[c1] INT NOT NULL PRIMARY KEY, 
[c2] INT
)
ON [PRIMARY] 

CREATE PROCEDURE [dbo].[ProcedureWithWarning]
AS
BEGIN
SELECT COUNT(*) FROM [dbo].[Table1]
 WHERE [c2] > 2;
END

CREATE PROCEDURE [dbo].[ProcedureFixed]
AS
BEGIN
SELECT COUNT(*) FROM [dbo].[Table1]
 WHERE ISNULL([c2],0) > 2;
END

Consulte também

Conceitos

Analisando o código do banco de dados para melhorar a qualidade do código