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