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