MSSQL BEGIN...END 블록 문법 - 흐름 제어(1)

MSSQL BEGIN…END 블록 문법 – 흐름 제어(1)

MS SQL 흐름 제어문 중에서 BEGIN…END 문은 여러 가지 Transact-SQL 문을 그룹으로 묶어 실행할 수 있도록 합니다. 저장 프로시저, 함수, 트리거를 만들 때 자주 사용되는 흐름 제어문이죠.

그럼 간단한 예제를 통해서 BEGIN…END 문에 대해서 알아보죠.

포스트 기준

– Microsoft SQL Server 2019

– SSMS 18.10

사용 예제

1. 구문(syntaxsql)

BEGIN
     { sql_statement | statement_block }
END

▶ BEGIN…END 블록은 중첩될 수 있습니다.


2. BEGIN…END 예제

DECLARE	@CNT_1		AS INT,
        @SUM_1		AS INT,
        @AVG_1		AS INT
     
SET @CNT_1 = 0   -- 초기화
SET @SUM_1 = 0   -- 초기화
SET @AVG_1 = 0   -- 초기화
     
SELECT @CNT_1 = COUNT(*),      -- 갯수 
       @SUM_1 = SUM(SCORE),    -- 합계
       @AVG_1 = AVG(SCORE)     -- 평균
  FROM BS_DEMO_7
     
-- 행이 있는 경우
IF @CNT_1 > 0
BEGIN
     PRINT '합계 : ' + CAST(@SUM_1 AS NVARCHAR)
     PRINT '평균 : ' + CAST(@AVG_1 AS NVARCHAR)
END
     
-- 행이 없는 경우
ELSE
BEGIN
     PRINT '합계 : 0'
     PRINT '평균 : 0'
END
     
GO
BEGIN...END 예제


3. BEGIN…END 문을 생략하면 오류 및 잘못된 결과 값이 나옵니다.

▶ 오류 발생 예제

DECLARE	@CNT_1		AS INT,
        @SUM_1		AS INT,
        @AVG_1		AS INT
     
SET @CNT_1 = 0   -- 초기화
SET @SUM_1 = 0   -- 초기화
SET @AVG_1 = 0   -- 초기화
     
SELECT @CNT_1 = COUNT(*),      -- 갯수 
       @SUM_1 = SUM(SCORE),    -- 합계
       @AVG_1 = AVG(SCORE)     -- 평균
  FROM BS_DEMO_7
     
-- 행이 있는 경우
IF @CNT_1 > 0
/* BEGIN...END 문을 생략하면 오류 발생 */
--BEGIN
     PRINT '합계 : ' + CAST(@SUM_1 AS NVARCHAR)
     PRINT '평균 : ' + CAST(@AVG_1 AS NVARCHAR)
--END
     
-- 행이 없는 경우
ELSE
BEGIN
     PRINT '합계 : 0'
     PRINT '평균 : 0'
END
     
GO
 BEGIN...END 문을 생략하면 오류 및 잘못된 결과 값이 나옵니다.


▶ 잘못된 결과 예제

DECLARE	@CNT_1		AS INT,
        @SUM_1		AS INT,
        @AVG_1		AS INT
     
SET @CNT_1 = 0   -- 초기화
SET @SUM_1 = 0   -- 초기화
SET @AVG_1 = 0   -- 초기화
     
SELECT @CNT_1 = COUNT(*),      -- 갯수 
       @SUM_1 = SUM(SCORE),    -- 합계
       @AVG_1 = AVG(SCORE)     -- 평균
  FROM BS_DEMO_7
     
-- 행이 있는 경우
IF @CNT_1 > 0
BEGIN
     PRINT '합계 : ' + CAST(@SUM_1 AS NVARCHAR)
     PRINT '평균 : ' + CAST(@AVG_1 AS NVARCHAR)
END
     
-- 행이 없는 경우
ELSE
/* BEGIN...END 문을 생략하면 잘못된 결과 발생 */
--BEGIN
     PRINT '합계 : 0'
     PRINT '평균 : 0'
--END
     
GO
잘못된 결괏값 예제

함께 보면 좋은 게시글

위로 스크롤