SR0007:对表达式中可以为 null 的列使用 ISNULL(column, default_value)

规则 ID

SR0007

类别

Microsoft.Performance

是否重大更改

非重大更改

原因

比较表达式中没有使用 ISNULL 函数,比较表达式中某一列中可能包含 NULL 值。

规则说明

如果您的代码对两个 NULL 值或对 NULL 值与任何其他值进行比较,则您的代码将返回未知的结果。

如何解决冲突

应通过包装可在 ISNULL 函数中包含 NULL 值的每列,显式指示如何处理比较表达式中的 NULL 值。

何时禁止显示警告

由于比较结果不确定,则不应该禁止显示此警告。

示例

此示例演示了一个简单的表定义和两个存储过程。 表包含列 [c2],其可包含 NULL 值。 第一个过程 [ProcedureWithWarning] 将 [c2] 与常量值进行比较。 第二个过程通过调用 ISNULL 函数,修复有关 [c2] 的问题。

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

请参见

概念

分析数据库代码以提高代码质量