IF 및 WHILE 블록을 사용하여 프로그램 흐름 제어

완료됨

모든 프로그래밍 언어에는 프로그램의 흐름 또는 명령문이 실행되는 순서를 결정하는 데 도움이 되는 요소가 포함됩니다. C#과 같은 언어만큼 완전히 기능하지는 않지만 T-SQL은 논리 테스트를 수행하고 T-SQL 데이터 조작 문을 포함하는 루프를 만드는 데 사용할 수 있는 흐름 제어 키워드 집합을 제공합니다. 이 단원에서는 T-SQL IF 및 WHILE 키워드를 사용하는 방법을 알아봅니다.

흐름 언어의 T-SQL 제어 이해

SQL Server는 T-SQL 일괄 처리, 저장 프로시저 및 다중 상태 사용자 정의 함수 내에서 프로그램 실행 흐름을 제어하는 언어 요소를 제공합니다. 이러한 흐름 제어 요소는 문을 실행할지 여부를 프로그래밍 방식으로 결정하고 실행해야 하는 문의 순서를 프로그래밍 방식으로 결정할 수 있음을 의미합니다.

이러한 요소는 다음을 포함하지만 이에 국한되지 않습니다.

  • 조건문 IF...ELSE는 부울 표현식에 따라 코드를 실행합니다.
  • WHILE는 조건이 참일 때 반복 실행하는 루프를 만듭니다.
  • BEGIN...END는 함께 실행해야 하는 일련의 T-SQL 문을 정의합니다.
  • 다른 키워드(예: BREAK, CONTINUE, WAITFOR 및 RETURN)는 T-SQL 흐름 제어 작업을 지원하는 데 사용됩니다.

다음은 IF 문의 예입니다.

IF OBJECT_ID('dbo.tl') IS NOT NULL
    DROP TABLE dbo.tl
GO

프로그램에서 IF...ELSE를 사용하여 조건부 논리를 구현하세요.

The IF... ELSE 구조는 조건자를 기반으로 코드 블록을 조건부로 실행하기 위해 T-SQL에서 사용됩니다. IF 문은 다음 문장이나 블록(BEGIN... END가 사용됨)이 실행될지 여부를 확인합니다. 조건자가 TRUE로 평가되면 블록의 코드가 실행됩니다. 조건자가 FALSE 또는 UNKNOWN로 평가되면 선택적 ELSE 키워드를 사용하여 다른 코드 블록을 식별하지 않는 한 블록이 실행되지 않습니다.

다음 IF 문에서 OBJECT_ID IS NULL인지 데이터베이스에 요청하고 있는 경우 PRINT 문을 반환합니다. 이 예제에서 개체는 Null이 아니 므로 FALSE입니다. 즉, BEGIN/END 코드가 실행되지 않습니다. PRINT 문은 개체가 데이터베이스에 없는 경우에만 실행됩니다.

USE TSQL;
GO
IF OBJECT_ID('HR.Employees') IS NULL --this object does exist in the sample database
BEGIN
    PRINT 'The specified object does not exist';
END;

위의 코드에 IF 문만 있는 제한 사항으로 인해 혼동될 수 있습니다. IF와 ELSE를 결합하면 코드의 논리를 유연하게 사용할 수 있으며 여러 ELSE 문을 사용할 수 있습니다. ELSE를 사용하면 다음 예제와 같이 IF 조건자가 FALSE 또는 UNKNOWN으로 평가되는 경우 다른 실행 옵션이 있습니다.

IF OBJECT_ID('HR.Employees') IS NULL --this object does exist in the sample database
BEGIN
    PRINT 'The specified object does not exist';
END
ELSE
BEGIN
    PRINT 'The specified object exists';
END;

데이터 조작 작업 내에서 EXISTS 키워드와 함께 IF를 사용하는 것은 다음 예제와 같이 효율적인 존재 확인을 위한 유용한 도구가 될 수 있습니다.

IF EXISTS (SELECT * FROM Sales.EmpOrders WHERE empid =5)
BEGIN
    PRINT 'Employee has associated orders';
END;

WHILE 문을 사용하여 반복을 이해하다

WHILE 문은 조건자를 기반으로 루프에서 코드를 실행하는 데 사용됩니다. IF 문과 마찬가지로 WHILE 문은 다음 문이 실행되는지 또는 BEGIN...END가 사용될 경우 블록이 실행되는지를 결정합니다. 조건이 TRUE로 평가되는 한 루프는 계속 실행됩니다. 일반적으로 조건자에서 테스트하고 루프 자체의 본문에서 조작된 변수를 사용하여 루프를 제어합니다.

다음 예제에서는 조건자 내의 @empid 변수를 사용하며, 해당 변수의 값을 BEGIN...END 블록 안에서 변경합니다.

DECLARE @empid AS INT = 1, @lname AS NVARCHAR(20);
WHILE @empid <=5
   BEGIN
	SELECT @lname = lastname FROM HR.Employees
		WHERE empid = @empid;
	PRINT @lname;
	SET @empid += 1;
   END;

WHILE 루프 내의 추가 옵션의 경우 CONTINUE 및 BREAK 키워드를 사용하여 흐름을 제어할 수 있습니다.