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