SR0007: Verwenden Sie in Ausdrücken in Spalten, die NULL-Werte zulassen, ISNULL (Spalte, Standardwert)

Regel-ID

SR0007

Kategorie

Microsoft.Performance

Unterbrechende Änderung

Nicht unterbrechend

Ursache

Eine ISNULL-Funktion wurde nicht in einem Vergleichsausdruck verwendet, bei dem eine Spalte einen NULL-Wert enthalten konnte.

Regelbeschreibung

Wenn im Code zwei NULL-Werte oder ein NULL-Wert mit einem beliebigen anderen Wert verglichen wird, wird im Code ein unbekanntes Ergebnis zurückgegeben.

Behandeln von Verstößen

Sie sollten explizit angeben, wie NULL-Werte in Vergleichsausdrücken behandelt werden sollen, indem Sie jede Spalte umbrechen, die einen NULL-Wert in einer ISNULL-Funktion enthalten kann.

Wann sollten Warnungen unterdrückt werden?

Da die Ergebnisse des Vergleiches unbestimmt sind, sollten Sie diese Warnung nicht unterdrücken.

Beispiel

In diesem Beispiel werden eine einfache Tabellendefinition und zwei gespeicherte Prozeduren gezeigt. Die Tabelle enthält eine Spalte, [c2,] die einen NULL-Wert enthalten kann. Die erste Prozedur, [ProcedureWithWarning], vergleicht [c2] mit einem konstanten Wert. Die zweite Prozedur behebt das Problem, indem [c2] mit einem Aufruf der ISNULL-Funktion umschlossen wird.

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

Siehe auch

Konzepte

Analysieren von Datenbankcode zum Verbessern der Codequalität