Поделиться через


SR0007: используйте функцию ISNULL(столбец, значение_по_умолчанию) в выражениях для столбцов, допускающих значения NULL

Идентификатор RuleId

SR0007

Категория

Microsoft.Performance

Критическое изменение

Не критическое

Причина

Функция ISNULL не использовалась в выражении сравнения, в котором столбец может содержать значение NULL.

Описание правила

Если в коде сравнивается два значения NULL или значение NULL с любым другим значением, то код будет возвращать неизвестный результат.

Устранение нарушений

Следует явно указать способ обработки значений NULL в сравнениях, заключив все столбцы, которые могут содержать значения NULL, в функцию ISNULL.

Отключение предупреждений

Поскольку результаты сравнения являются неопределенными, не следует отключать это предупреждение.

Пример

В этом примере показано определение простой таблицы и две хранимые процедуры. Таблица содержит столбец, [c2], который может содержать значение NULL. В первой процедуре, [ProcedureWithWarning], [c2] сравнивается с постоянным значением. Во второй процедуре эта проблема устранена путем сворачивания [c2] с помощью вызова функции 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

См. также

Основные понятия

Анализ кода базы данных с целью улучшения качества кода