일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- GEB
- 통합테스트
- redis 설치
- MongoDB 계정 생성
- MongoDB
- MongoDB Role 생성
- REDIS
- Mongodb 설치
- MongoDB Role
- 테스트 자동화
- MongoDB 계정
- centos
- Today
- Total
소울메이커
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으로 채워 넣었다. )
'프로그래밍' 카테고리의 다른 글
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 |