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 문을 사용하여 특정 번호를 지정할 수 있다.
본 웹사이트는 광고를 포함하고 있습니다. 광고 클릭에서 발생하는 수익금은 모두 웹사이트 서버의 유지 및 관리, 그리고 기술 콘텐츠 향상을 위해 쓰여집니다.