다음을 통해 공유


SR0013: 출력 매개 변수(매개 변수)가 모든 코드 경로에 채워집니다.

규칙 ID

SR0013

범주

Microsoft.Design

변경 수준

주요 변경 아님

원인

출력 매개 변수는 저장 프로시저나 함수를 통해 가능한 모든 코드 경로가 초기화하지 않습니다.

규칙 설명

이 규칙은 출력 매개 변수가 저장된 프로시저 또는 함수를 통해 하나 이상의 코드 경로에 있는 값으로 설정되지 않는 코드를 식별합니다. 이 규칙은 출력 매개 변수에 어떤 경로를 설정해야 하는지 식별하지 않습니다. 여러 출력 매개 변수에 이 문제가 있는 경우 각 매개 변수마다 하나의 경고가 나타납니다.

위반 문제를 해결하는 방법

두 가지 방법 중 하나로 이 문제를 해결할 수 있습니다. 프로시저 본문을 시작할 때 출력 매개 변수를 기본값으로 초기화하는 경우 이 문제를 가장 쉽게 해결할 수 있습니다. 다른 방법으로, 매개 변수가 설정되지 않은 특정 코드 경로에 있는 값으로 출력 매개 변수를 설정할 수도 있습니다. 그러나 복잡한 프로시저에서 일반적이지 않은 코드 경로를 간과할 수도 있습니다.

중요

CREATE PROC MyProcedure (@param1 INT = 10 OUTPUT) 같은 프로시저 선언 내에 값을 지정하면 문제가 해결되지 않습니다. 프로시저 본문 내에서 출력 매개 변수에 값을 할당해야 합니다.

경고를 표시하지 않는 경우

이 경고는 반드시 표시해야 합니다. 가장 좋은 방법은 상상 출력 매개 변수를 한 값으로 설정하는 것입니다. 결정되지 않은 값이 반환되는 경우 예기치 않은 결과가 저장 프로시저나 함수를 호출하는 코드에 나쁜 영향을 줄 수 있습니다.

예제

다음 예제에서는 두 가지 간단한 프로시저를 보여 줍니다. 첫 번째 절차에서는 @Sum 출력 매개 변수 값을 설정하지 않습니다. 두 번째 절차에서는 모든 코드 경로에 값이 설정되도록 프로시저의 시작 부분에서 @Sum 매개 변수를 초기화합니다.

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

참고 항목

개념

데이터베이스 코드를 분석하여 코드 품질 향상