티스토리 뷰


SQL Server 2012의 강화된 T-SQL: 시퀀스(Sequence)

SQL Server 2012의 시퀀스에 대한 내용을 알아보도록 하겠습니다. 이전버전에서는 IDENTITY 라는 속성을 통해 순차적인 일련번호를 생성했습니다. 새롭게 시퀀스라는 개체가 제공되어 일련번호를 효과적으로 사용할 수 있을 것 같은데 아래에서 한번 살펴보도록 하겠습니다.

 

먼저 아래와 같이 데이터베이스에 테이블을 생성합니다.

 

CREATE TABLE Products

(

    ProductID INT NOT NULL PRIMARY KEY

    ,Name VARCHAR(200) NULL

,ModifiedDate DATETIME DEFAULT GETDATE()

);

 

Products 테이블에 ProductID를 일련번호로 생성하기 위해서는 IDENTITY를 사용했지만 별도의 시퀀스(Sequence) 개체를 아래와 같이 생성할 수 있습니다.

CREATE SEQUENCE PIdSequence AS INT

    START WITH 1

    INCREMENT BY 1;

 

초기값 1 , 증가값 1로 시퀀스(Sequence) 개체를 생성했습니다. 생성된 개체는 개체탐색기의 프로그래밍 기능, 시퀀스에서 살펴볼 수 있습니다.


시퀀스(Sequence)의 개체를 더블 클릭하면 아래와 같은 대화 상자를 볼 수 있는데 현재 값이나 다시 시작 순서, CACHE 에 대한 내용을 알 수 있습니다.

 

 위에서 생성한 Products 테이블에 시퀀스(Sequence) 개체를 적용해보도록 하겠습니다.

INSERT 구문 등에서 NEXT VALUE FOR PIdSequence 를 사용하면 됩니다.

 

INSERT INTO Products (ProductID, Name)

   VALUES (NEXT VALUE FOR PIdSequence, 'Coffece');

 

위 구문을 여러 번 실행하여 Products를 여러 개를 입력한 결과는 아래와 같습니다.

 

/*

1           Coffece             2012-03-19 09:54:00.327

2           Coffece             2012-03-19 09:54:00.913

3           Coffece             2012-03-19 09:54:01.400

4           Coffece             2012-03-19 09:54:01.853

5           Coffece             2012-03-19 09:54:02.277

*/

 

l  위에서 생성한 시퀀스(Sequence) 개체는 Products 테이블에만 종속된 것은 아니며 다른 테이블에서도 사용이 가능합니다. 다른 테이블에서 사용하면 해당 값은 증가되며 증가된 값을 계속 사용하게 됩니다.

NEXT VALUE FOR PIdSequence 을 실행할 경우 시퀀스(Sequence) 값은 증가하게 됩니다.

l  중간에 값이 비어 있는 경우 SET IDENTITY_INSERT 옵션을 쓰지 않고 누락된 값을 INSERT 하면 됩니다.

l  현재 값을 알려면 아래 구문을 실행할 수 있습니다.

SELECT cache_size, current_value

FROM sys.sequences

WHERE name = 'PIdSequence' ;

 

l  복제, SSIS 등의 경우 시퀀스(Sequence)를 사용할 경우 더 효과적으로 사용이 가능합니다.

l  CACHE 옵션이 있어 대용량 데이터를 처리하는 일련번호일 경우 Sequence가 우수할 것으로 보입니다.

 

'SQL' 카테고리의 다른 글

SQL Server 2012에서의 FORMAT 함수  (0) 2012.04.04
SQL Server 2012 T-SQL: CHOOSE, IIF 논리함수  (0) 2012.03.28
SQL Server 2012의 강화된 T-SQL : 페이징 - OffSet/Fetch  (0) 2012.03.14
SQL Server 2012 RTM  (0) 2012.03.07
Hadoop  (0) 2012.02.13
댓글