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