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