SR0013: Il parametro di output (parametro) non è popolato in tutti i percorsi del codice

RuleId

SR0013

Category

Microsoft.Design

Breaking Change

Unificatore

Causa

I parametri di output non sono inizializzati in tutti i possibili percorsi di codice in una stored procedure o funzione.

Descrizione della regola

Questa regola identifica il codice in cui il parametro di output non è impostato su un valore in uno o più percorsi di codice tramite la stored procedure o la funzione. Questa regola non identifica in quali percorsi deve essere impostato il parametro di output. Se questo problema viene riscontrato da più parametri di output, per ogni parametro viene visualizzato un avviso.

Come correggere le violazioni

È possibile correggere questo problema in due modi. È possibile correggere più facilmente questo problema se si inizializzano i parametri di output a un valore predefinito all'inizio del corpo della procedura. In alternativa, è possibile impostare anche il parametro di output su un valore nei percorsi di codice specifici nei quali il parametro non è impostato. Tuttavia, si potrebbe trascurare un percorso di codice non comune in una procedura complessa.

Nota importanteImportante

Specificando un valore all'interno della dichiarazione della procedura, come ad esempio CREATE PROC MyProcedure (@param1 INT = 10 OUTPUT) non risolverà il problema. È necessario assegnare un valore al parametro di output all'interno del corpo della procedura.

Esclusione di avvisi

Non escludere tale avviso. È consigliabile impostare sempre i parametri di output su un valore. Se viene restituito un valore indeterminato, dei risultati imprevisti potrebbero influire negativamente sul codice che chiama la stored procedure o la funzione.

Esempio

Nell'esempio che segue vengono illustrate due semplici routine. La prima routine non imposta il valore del parametro di output, @Sum. La seconda routine inizializza il parametro @Sum all'inizio della routine, garantendo così che il valore sarà impostato in tutti i percorsi di codice.

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

Vedere anche

Concetti

Analisi del codice di database per migliorare la qualità del codice