SQL programming 
SEQUENCE 란?

SEQUENCE 는 테이블이나 컬럼에 종속되지 않고 데이타베이스 상에 별도 존재하는 오브젝트로서 올림차순 혹은 내림차순으로 순차적인 값을 리턴하는 SQL 오브젝트이다. 이는 IDENTITY 속성이 한 테이블 내의 특정 컬럼에 종속되어 사용된다는 점과 다르다. 또한 IDENTITY는 ROW가 INSERT될 때에 생성되지만, SEQUENCE는 Application이 특정 함수(NEXT VALUE FOR)를 호출하여 INSERT와 별개로 다음 Sequenece 값(NEXT VALUE)을 가져올 수 있다. SQL의 SEQUENCE는 그 독립적인 특성 때문에 Application이 NEXT VALUE를 얻어 여러 테이블들 혹은 여러 컬럼들에 동시에 그 값을 사용할 수 있다. 이는 Application 개발자에게 보다 많은 Control과 유연성을 준다.
SEQUENCE는 SQL 2012 이상에서 지원되는데, SEQUENCE를 생성하기 위해 CREATE SEQUENCE 문을 사용한다. 이 문장에 일반적으로 처음 시작값과 증가값을 지정한다. SEQUENCE를 사용하려면 NEXT VALUE FOR 문을 사용하여 다음 순차값을 가져온다. 아래는 SEQUENCE의 생성하고 사용하는 간단한 예제이다.


예제






IDENTITY 대용으로 SEQUENCE 사용하는 방법

SQL Server 2008/R2와 그 이전 버젼에서는 IDENTITY 컬럼이 (비교적 일관되게) 사용자가 지정한 순차적인 번호를 갖었었다. 하지만, SQL Server 2012부터 IDENTITY 컬럼 값이 가끔 갑자기 1000씩 (혹은 임의의 증가값만큼) 증가하는 현상을 볼 수 있다. 가장 흔한 케이스로 SQL Server를 재시작하면 IDENTITY 값이 갑자기 비정상적으로 증가하는 경우가 많다. 이러한 문제점을 해결하기 위해 (1) SQL 2012의 새로운 오브젝트인 SEQUENCE 를 하거나 (2) Trace Flag를 사용할 수 있다. 첫번째 방식을 사용하여, 즉 SEQUENCE를 사용하여 IDENTITY와 같은 효과를 내기 위해서는 IDENTITY 속성 대신 아래 예제과 같이 SEQUENCE를 디폴트로 지정하여 사용할 수 있다.

예제





SEQUENCE 컨트롤하기

SEQUENCE는 순차적으로 다음 값을 가져오는데, 경우에 따라 다음 값을 특정한 값으로 지정하고 싶은 때가 있다. 예를 들어, Customer 테이블 ID 컬럼에 순차적으로 일련번호를 붙이고 있었는데, 이 테이블의 마지막 10개의 ROW를 지워야 하는 경우가 발생할 수 있다. 이런 경우 DELETE 문으로 10개의 ROW들을 지운 후, SEQUENCE를 NEXT VALUE - 10으로 되돌리고 싶어할 것이다. IDENTITY를 사용할 경우 이런 컨트롤은 불가능했지만, SEQUENCE는 ALTER SEQUENCE ... RESTART WITH 문을 사용하여 특정 번호를 지정할 수 있다.

예제





본 웹사이트는 광고를 포함하고 있습니다. 광고 클릭에서 발생하는 수익금은 모두 웹사이트 서버의 유지 및 관리, 그리고 기술 콘텐츠 향상을 위해 쓰여집니다.