동적쿼리의 프로시저 작성 중
일반 프로그래밍 언어처럼 어떠한 실행 결과값을 변수로 남기고 싶었습니다.
오랜 고민 끝에 두 가지 해결책이 나왔는데요,
1) 실행 결과값을 TABLE 변수에 저장
2) EXEC SP_EXECUTESQL
이번 포스팅에서는 SP_EXECUTESQL 사용법에 대해 다뤄보겠습니다.
[코드]
BEGIN DECLARE @RESULT INT; -- 결과값을 담을 지역 변수 DECLARE @NUM1 INT = 10; DECLARE @NUM2 INT = 20; DECLARE @SQL NVARCHAR(MAX) =''; -- [주의] NVARCHAR 타입을 가져야함. DECLARE @SQL_VAR NVARCHAR(MAX) =''; -- [실행 SQL의 내부 변수 선언] SET @SQL_VAR = N'@V_RESULT FLOAT OUTPUT'; -- [실행할 SQL 정의] SET @SQL = N'SELECT @V_RESULT = ' + CONVERT(VARCHAR, @NUM1) + '+' + CONVERT(VARCHAR, @NUM2); EXEC SP_EXECUTESQL @SQL, @SQL_VAR, -- 설정한 SQL, Variable @V_RESULT = @RESULT OUTPUT; -- Variable 값을 반환 받음 (Variable -> 지역변수) PRINT @SQL PRINT @RESULT END
[결과]
1) @RESULT : 실행 시키고자하는 SQL의 결과값을 받기 위한 변수입니다.
2) @NUM1, @NUM2 : 동적 쿼리로 변하는 변수를 표현합니다.
3) @SQL : 실행 시키고자 하는 SQL을 NVARCHAR 형태로 저장합니다.
(이 때, SP_EXECUTESQL에서 NVARCHAR를 요구하므로 VARCHAR로 선언하는 실수를 하지 않도록 합시다.)
4) @SQL_VAR : @SQL에 정의한 변수 정의
✱ 추가 설명
더불어 이해를 돕기위해 설명하자면,
1. 실행할 SQL(@SQL)과 실행 SQL에서 RETURN 값을 저장할 변수 정의(@SQL_VAR)
2. SP_EXECUTE 실행의 경우 많이 헷갈리는 부분이 마지막 PARAMETER로
[SQL결과값] = [반환받을 변수] OUTPUT
저는 동적 쿼리 개발 당시 위 기법으로 특정 테이블들의 집계함수 결과값들을 가져와
프로시저 쿼리 내부에서 사용하는 방향으로 사용했습니다.
(혹여, 가독성 및 용어와 같은 불편하신점 있으시다면 코멘트 남겨주시면 감사하겠습니다.🌝)
1 댓글
실무에서 도움이 됐습니다. 감사합니다
답글삭제