| 规则 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