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
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
▶ 잘못된 결과 예제
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
함께 보면 좋은 게시글
- MSSQL CASE WHEN THEN 조건식 사용법 – 식(1)
- MSSQL IF…ELSE 블록 문법 – 흐름 제어(2)
- MSSQL WHILE(반복문), CONTINUE, BREAK 사용법 – 흐름 제어(3)
- MSSQL GOTO 문, RETURN 문 사용법 – 흐름 제어(4)
- MSSQL 트리거(TRIGGER) 사용법(생성) 및 예제
이 글이 도움이 되셨다면 공유 부탁 드립니다.


![[SSMS] 로컬 서버(PC)에 설치한 MSSQL 서버 연결하는 방법](https://bluesharehub.com/wp-content/uploads/2022/02/img_41.png)
