SR0013: Der Ausgabeparameter (Parameter) wird nicht in allen Codepfaden aufgefüllt

Regel-ID

SR0013

Kategorie

Microsoft.Design

Unterbrechende Änderung

Nicht unterbrechend

Ursache

Die Ausgabeparameter werden nicht in allen möglichen Codepfaden innerhalb einer gespeicherten Prozedur oder Funktion initialisiert.

Regelbeschreibung

Durch diese Regel wird Code gekennzeichnet, in dem der Ausgabeparameter durch die gespeicherte Prozedur oder Funktion nicht auf einen Wert in mindestens einem Codepfad festgelegt wird. Durch diese Regel wird nicht angegeben, in welchen Pfaden der Ausgabeparameter festgelegt werden soll. Wenn dieses Problem bei mehreren Ausgabeparametern besteht, wird eine Warnung für jeden Parameter angezeigt.

Behandeln von Verstößen

Sie können dieses Problem auf zwei Arten beheben. Sie können dieses Problem am leichtesten beheben, wenn Sie zu Beginn der Prozedur die Ausgabeparameter mit einem Standardwert initialisieren. Als Alternative können Sie auch den Ausgabeparameter auf einen Wert in den speziellen Codepfaden festlegen, in dem der Parameter nicht festgelegt wird. Sie könnten jedoch einen ungewöhnlichen Codepfad in einer komplexen Prozedur übersehen.

Wichtig

Die Angabe eines Wertes in der Prozedurdeklaration, wie z. B. CREATE PROC MyProcedure (@param1 INT = 10 OUTPUT), löst das Problem nicht. Sie müssen dem Ausgabeparameter innerhalb des Verfahrenstexts einen Wert zuweisen.

Wann sollten Warnungen unterdrückt werden?

Diese Warnung sollte nicht unterdrückt werden. Als Best Practice sollten Sie immer die Ausgabeparameter auf einen Wert festlegen. Wenn ein unbestimmter Wert zurückgegeben wird, könnten unerwartete Ergebnisse den Code beeinträchtigen, in dem die gespeicherte Prozedur oder die Funktion aufgerufen wird.

Beispiel

Im folgenden Beispiel werden zwei einfache Prozeduren veranschaulicht. Die erste Prozedur legt den Wert des Ausgabeparameters, @Sum, nicht fest. Mit der zweiten Prozedur wird der @Sum-Parameter am Anfang der Prozedur initialisiert. Dadurch wird sichergestellt, dass der Wert in allen Codepfaden festgelegt wird.

CREATE PROCEDURE [dbo].[procedureHasWarning]
(
@Value1 BIGINT,
@Value2 INT,
@Value3 INT,
@Sum INT OUTPUT 
) 
AS 
BEGIN
-- No initialization of the output parameter
--
-- Additional statements here.
--
RETURN 0;
END
--
CREATE PROCEDURE [dbo].[procedureFixed]
(
@Value1 BIGINT,
@Value2 INT,
@Value3 INT,
@Sum INT OUTPUT 
) 
AS 
BEGIN
-- Initialize the out parameter
SET @Sum = 0;
--
-- Additional statements here
--
RETURN 0;
END

Siehe auch

Konzepte

Analysieren von Datenbankcode zum Verbessern der Codequalität