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