SR0007:在運算式中可為 Null 的資料行上,使用 ISNULL(column, default_value)

RuleId

SR0007

分類

Microsoft.Performance

中斷變更

中斷

原因

ISNULL 函式沒有在比較運算式中使用,其中資料行可能包含 NULL 值。

規則描述

如果您的程式碼會比較兩個 NULL 值,或是 NULL 值與任何其他值,您的程式碼將會傳回未知的結果。

如何修正違規

您應該明確地指出,如何透過將每個可在 ISNULL 函式中包含一個 NULL 值的資料行換行,來處理比較運算式中的 NULL 值。

隱藏警告的時機

因為比較結果是不定,您不應該隱藏這項警告。

範例

此範例顯示簡單的資料表定義和兩個預存程序。 資料表包含資料行 [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

請參閱

概念

分析資料庫程式碼以改善程式碼品質