SR0007: Use ISNULL(columna, valor predeterminado) en columnas que admiten valores NULL en expresiones

Identificador de regla

SR0007

Categoría

Microsoft.Performance

Cambio problemático

Poco problemático

Causa

Una función ISNULL no se utilizó en una expresión de comparación donde una columna pudiera contener un valor NULL.

Descripción de la regla

Si el código compara dos valores NULL o un valor NULL con cualquier otro valor, se devolverá un resultado desconocido.

Cómo corregir infracciones

Debe indicar explícitamente cómo administrar los valores NULL en expresiones de comparación ajustando cada columna que puede contener un valor NULL en una función ISNULL.

Cuándo suprimir advertencias

Dado que los resultados de la comparación son indeterminados, no debería suprimir esta advertencia.

Ejemplo

En este ejemplo se muestran una definición de tabla simple y dos procedimientos almacenados. La tabla contiene una columna, [c2], que puede contener un valor NULL. El primer procedimiento, [ProcedureWithWarning], compara [c2] con un valor constante. El segundo procedimiento corrige el problema ajustando [c2] con una llamada a la función 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

Vea también

Conceptos

Analizar el código de base de datos para mejorar la calidad del código