Notice
Recent Posts
Recent Comments
Link
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
Archives
Today
Total
관리 메뉴

소울메이커

mssql Sequence(시퀀스) 본문

프로그래밍

mssql Sequence(시퀀스)

언젠간 프로 2013. 10. 11. 16:53

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으로 채워 넣었다. )


'프로그래밍' 카테고리의 다른 글

Eclipse derived 해결 방법  (0) 2014.05.20
Oracle Tablespace 삭제  (0) 2013.11.04
mssql nvl2  (0) 2013.10.11
mssql nvl 함수  (0) 2013.10.11
mssql date format  (0) 2013.10.11