SR0013: O parâmetro de saída (parâmetro) não é preenchido em todos os caminhos de código

RuleId

SR0013

<strong>Categoria</strong>

Microsoft.design

Alteração significativa

Não quebrar

Causa

Os parâmetros de saída não são inicializados em todos os caminhos de código possível ao longo de um procedimento armazenado ou função.

Descrição da regra

Esta regra identifica o código que o parâmetro de saída não está definido para um valor em um ou mais caminhos de código por meio da função ou procedimento armazenado. Esta regra não identificar os caminhos, o parâmetro de saída deve ser definido. Se vários parâmetros de saída tiverem esse problema, um aviso será exibida para cada parâmetro.

Como corrigir violações

Você pode corrigir esse problema em uma das duas maneiras. Se você inicializar os parâmetros de saída para um valor padrão no início do corpo do procedimento, você pode corrigir esse problema com mais facilidade. Como alternativa, você também pode definir o parâmetro de saída para um valor nos caminhos de código específico que o parâmetro não está definido. No entanto, você pode esquecer um caminho de código incomum em um procedimento complexo.

Observação importanteImportante

Especificando um valor dentro da declaração de procedimento, como CREATE PROC MyProcedure (@param1 INT = 10 OUTPUT) não resolverá o problema. Você deve atribuir um valor para o parâmetro de saída dentro do corpo do procedimento.

Quando suprimir avisos

Você não deve suprimir esse aviso. Como prática recomendada, você deve sempre definir os parâmetros de saída para um valor. Se um valor indeterminado é retornado, resultados inesperados podem afetar o código que chama o procedimento armazenado ou função.

Exemplo

O exemplo a seguir mostra dois procedimentos simples. O primeiro procedimento não define o valor do parâmetro de saída, @ soma. O segundo procedimento inicializa o parâmetro @ soma no início do procedimento, o que garante que o valor será definido em todos os caminhos de código.

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

Consulte também

Conceitos

Analisando o código do banco de dados para melhorar a qualidade do código