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