Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
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