次の方法で共有


SR0007: 式では NULL 値が許可される列で ISNULL(column, default value) を使用してください

RuleId

SR0007

カテゴリ

Microsoft.Performance

互換性に影響する変更点

なし

原因

NULL 値を格納できる列の比較式で ISNULL 関数が使用されませんでした。

規則の説明

コードで 2 つの NULL 値または NULL 値を他の値と比較すると、不明な結果が返されます。

違反の修正方法

NULL 値を格納できる各列を ISNULL 関数でラップすることにより、比較式で NULL 値を処理する方法を明示的に示す必要があります。

警告を抑制する状況

比較の結果は不定であるため、この警告は抑制しないでください。

使用例

この例では、単純なテーブル定義と 2 つのストアド プロシージャを示します。 テーブルには、NULL 値を格納できる列 [c2] があります。 最初のプロシージャ ProcedureWithWarning は [c2] を定数値と比較します。 2 番目のプロシージャは、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

参照

概念

スタティック分析によるデータベース コードの改善