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