mssql Sequence(시퀀스)
MSSQL에서 시퀀스를 사용해야 할 경우 시퀀스 정보 테이블을 이용하는 방법이 있다.
이 경우 시퀀스 정보를 관리 할 테이블을 생성하고 시퀀스 사용자 정의 함수를 만들어
연동하여 사용한다.
우선 시퀀스 테이블을 생성한다. 여기서 포인트는 시퀀스 번호로 사용할 컬럼에 IDENTITY를 정의 해야 한다는 점이다.
CREATE TABLE [dbo].[TB_SEQUENCE_INFO](
[SEQ_VAL] [numeric](18, 0) IDENTITY(1,1) NOT NULL,
[TABLE_NAME] [varchar](250) NULL
) ON [PRIMARY]
GO
위에서 IDENTITY(1,1)은 1부터 1씩 증가한다는 의미 이다.
테이블을 생성하였으면 시퀀스 생성 함수를 만든다.
ALTER PROCEDURE [dbo].[PROC_MAKE_SEQUENCE]
(
@SEQ_DIV VARCHAR(50)
) AS
BEGIN
INSERT INTO TB_SEQUENCE_INFO (TABLE_NAME) VALUES(@SEQ_DIV) ;
DECLARE @NEXT_VAL VARCHAR(100);
SET @NEXT_VAL = CAST(IDENT_CURRENT('TB_SEQUENCE_INFO') AS VARCHAR)
IF (UPPER(@SEQ_DIV)='COMPANY')
BEGIN
SET @NEXT_VAL = 'CMPY' + REPLICATE('0', 10 - LEN(@NEXT_VAL)) + @NEXT_VAL;
END
ELSE IF (UPPER(@SEQ_DIV)='USER_INFO')
BEGIN
SET @NEXT_VAL = 'USER' + REPLICATE('0', 10 - LEN(@NEXT_VAL)) + @NEXT_VAL;
END
ELSE SET @NEXT_VAL ='_ERROR';
SELECT @NEXT_VAL AS SEQ_VAL;
END
위에서 REPLICATE를 사용한 이유는 오라클의 LPAD의 효과를 주기 위함이다.
이를 사용함으로써 시퀀스 값 외 특정 자릿수 만큼 지정한 문자로 채워 넣을 수 있다.
예) USER000001(시퀀스 1값 앞에 특정 자릿수 만큼 0으로 채워 넣었다. )