본문 바로가기

Programming/Microsoft SQL Server

[SQL] 흐름제어 구문

1. Begin/End

연관된 여러 Query를 그룹화 합니다. 이는 비슷하거나 같은 목적별로 작동하는 Query를 묶어 관리를 용이하게 합니다.

Begin
     Select * From HumanResources.Department;
     Select * From HumanResources.Employee;
End

2. While

조건에 따라 Query를 반복 실행합니다.

Declare @i Int;
Set @i = 1

While(@i <= 5)
Begin
 Select *
 From HumanResources.Department
 Where DepartmentID = @i;
 
 Set @i = @i + 1;
End


정수형 변수  @i를 선언하고 초기값을 1로 해준 후 @i값이 5와 같거나 미만인 경우에만 Begin/End 사이의 Query를 수행하도록 합니다.


3. Continue

Continue를 While문에 포함시키면 해당 구문이 들어간 위치이하의 Query실행을 건너뛸 수 있습니다.

Declare @i Int;
Set @i = 1

While(@i <= 5)
Begin
 If (@i = 4)
 Begin
  Set @i = @i + 1;
  Continue;
 End
 
 Select *
 From HumanResources.Department
 Where DepartmentID = @i;
 
 Set @i = @i + 1;
End


정수형 변수 @i를 선언하고 초기값을 1로 하였습니다. 이때 @i값이 5와 같거나 미만인 경우에만 Begin/End 사이의 Query를 수행하도록 합니다.

단, If문을 통하여 @i가 4인 경우에는 Continue문으로 실행을 건너 뛰도록 합니다.


4. Break

Break를 While에 포함시키면 해당 구문이 들어간 위치이하의 Query실행을 취소할 수 있습니다.

Declare @i Int;
Set @i = 1

While(@i <= 5)
Begin
 If (@i = 4)
 Begin
  Set @i = @i + 1;
  Break;
 End
 
 Select *
 From HumanResources.Department
 Where DepartmentID = @i;
 
 Set @i = @i + 1;
End


If문에서 Continue대신 Break문을 삽입하였습니다. Break는 재실행 없이 While문 전체를 취소합니다.


5. Waitfor

지정한 특정시간에 또는 해당 시간만큼 대기한 후 Query를 실행합니다.

Waitfor Delay '00:00:05'
Begin
 Select * From HumanResources.Department;
End

약 5초간 대기한 후 Query를 실행합니다.


실행 결과를 보면 Query실행 시간이 00:00:05 라고 표시되어 있음을 확인할 수 있습니다.

Waitfor Time '19:15:00';
Begin
 Select * From HumanResources.Department;
End

오후 07시 15분이 되면 Query를 실행합니다.


6. Return

Query의 실행을 종료합니다. 숫자나 문자열을 인수로 지정하면 해당 값을 반환값으로 얻을 수 있습니다.

Select * From HumanResources.Department;
Return;
Select * From HumanResources.Employee;

Return이하 Query문은 실행하지 않고 종료합니다. (또 다른 종료 구문인 Break는 While등의 반복문 안에서만 유효합니다.)


7. IF

Query수행에 따른 조건을 지정할 수 있습니다.

Declare @i Int;
Set @i = 2;

If (@i = 1)
Begin
 Select * From HumanResources.Department;
End
Else If (@i = 2)
Begin
 Select * From HumanResources.Employee;
End
Else
Begin
 Select * From HumanResources.EmployeeDepartmentHistory;
End


변수 @i값에 따라 1이면 Select * From HumanResources.Department문을 2면 Select * From HumanResources.Employee문을 그외 다른 값이면 Select * From HumanResources.EmployeeDepartmentHistory문을 실행합니다.

▶ Set을 통해 2의 값을 넣었으므로 If문의 조건에 따라 Select * From HumanResources.Employee문이 수행되었습니다.

조건지정에서는 처음 If문과 그 다음 Else If문을 통하여 각기 다른 값에 따라 처리를 달리할 수 있습니다. 또한 If와 그 외 모든 Else If의 조건에 부합하지 않을 경우에는 Else문을 통하여 별도의 처리를 지정할 수도 있습니다.

8. Goto

Query수행에 대한 분기 명령으로 원하는 지점부터 Query수행을 지시할 수 있습니다.

Declare @i Int;
Set @i = 3;

If (@i = 1)
Begin
 Goto Squery_rtn1;
End
Else If (@i = 2)
Begin
 Goto Squery_rtn2;
End
Else
Begin
 Goto Squery_rtn3;
End

Squery_rtn1:
Begin
 Select * From HumanResources.Department;
End
Return;

Squery_rtn2:
Begin
 Select * From HumanResources.Employee;
End
Return;

Squery_rtn3:
Begin
 Select * From HumanResources.EmployeeDepartmentHistory;
End
Return;


변수 @i값에 따라 Query를 수행할 분기점이 달라지도록 하였습니다.(만일 @i값이 2이면 Squery_rtn2지점으로 jump하여 Return까지 모든 Query를 수행합니다.)

분기할 지점은 'Goto [분기할 이름]'의 형식으로, 실제 분기 지점은 '[분기할 이름]:'형식(반드시 이름 끝에 : 문자가 붙어야 합니다.!)으로 지정합니다.

주의: Goto문으로 실행 분기점을 지정한다는 것은 해당 지점부터 이하 모든 Query수행을 의미합니다.
즉, '해당 지점만'실행한다는 의미가 아니므로 원하는 분기지점만 수행을 원할경우 분기점마지막에 반드시 Return을 넣어 주도록 합니다.

Squery_rtn2:
Begin
 Select * From HumanResources.Employee;
End
Return;

Return문이 존재하지 않으면 실행분기점이 Squery_rtn2지점일때 Squery_rtn2뿐만 아니라 Squery_rtn3지점까지도 모두 실행하게 됩니다.

▶ @i변수에 3이 지정되어 Squery_rtn3: 으로 실행지점이 분기되었습니다.

'Programming > Microsoft SQL Server' 카테고리의 다른 글

[SQL] Table 조회시 합계 표시하기  (0) 2010.04.26
[SQL] 하위 Query(Sub Query)  (0) 2010.04.21
[SQL] 흐름제어 구문  (0) 2010.04.08
[SQL] 데이터(Data) 형식  (2) 2010.04.01
[SQL] Table Join  (3) 2010.03.31
Microsoft SQL Server 설치  (0) 2010.03.25