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

規則 ID

SR0007

分類

Microsoft.Performance

互換性に影響する変更点

なし

原因

列に NULL 値を含むことができる比較式で、ISNULL 関数が使用されませんでした。

規則の説明

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

違反の修正方法

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

警告を抑制する状況

比較結果は予測できないため、この警告は抑制しないでください。

使用例

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

参照

概念

データベース コードの分析によるコードの品質の向上