WEB/MSSQL
[MSSQL] 프로시져 내 반복문 사용 쿼리
인생시계
2021. 1. 18. 11:35
[MSSQL] 프로시져(PROCEDURE) 내 반복문(LOOP) 사용 쿼리
while를 사용하여 반복문 구현
프로시저 생성쿼리 :
CREATE PROCEDURE [dbo].[PROC_TEST]
(
@OUT_DBMS_CODE INT OUTPUT
, @OUT_DBMS_MSG NVARCHAR(MAX) OUTPUT
)
AS
BEGIN
/* 변수선언 */
DECLARE @REC
TABLE
(
ROWNUM INT
, TEXT1 NVARCHAR(255)
)
DECLARE @IDX INT
, @MAX_CNT INT
, @L_TEXT1 NVARCHAR(255)
/* OUTPUT 변수 초기화 */
SET @OUT_DBMS_CODE = 0;
SET @OUT_DBMS_MSG = '';
BEGIN TRY
/* 임시 테이블 생성*/
WITH TMP_A AS
(
SELECT '일월' AS TEXT1, 1 AS ORD
UNION ALL
SELECT 'FEB' AS TEXT1, 2 AS ORD
UNION ALL
SELECT '3월' AS TEXT1, 3 AS ORD
UNION ALL
SELECT '사월' AS TEXT1, 4 AS ORD
UNION ALL
SELECT 'MAY' AS TEXT1, 5 AS ORD
UNION ALL
SELECT '6월' AS TEXT1, 6 AS ORD
)
INSERT @REC
SELECT ROW_NUMBER()OVER(ORDER BY ORD) AS ROW_NUM
, TEXT1
FROM TMP_A
END TRY
BEGIN CATCH
ROLLBACK;
SET @OUT_DBMS_CODE = ERROR_NUMBER();
SET @OUT_DBMS_MSG = ERROR_MESSAGE();
END CATCH
SELECT @IDX = 1
, @MAX_CNT = MAX(ROWNUM)
FROM @REC
WHILE @IDX <= @MAX_CNT
BEGIN
SELECT @L_TEXT1 = A.TEXT1
FROM @REC A
WHERE A.ROWNUM = @IDX;
PRINT CONVERT(NVARCHAR(255), @IDX) + ' : ' + @L_TEXT1;
SET @IDX = @IDX + 1;
END
END
실행 소스 :
DECLARE @OUT_DBMS_CODE INT
, @OUT_DBMS_MSG NVARCHAR(MAX)
EXEC PROC_TEST @OUT_DBMS_CODE OUTPUT, @OUT_DBMS_MSG OUTPUT