MS SQL sequence 만들기

2012. 3. 27. 09:27 from DB

 

ORACLE에는 sequence가 있듯,

MS SQL에는 자동증가로  IDENTITY가 있다. 하지만 칼럼타입이 int 같은 정수여야만 사용가능하다...

 

문제는 시퀀스 칼럼타입이 INT가 아니고 varchar타입이다.

(컬럼타입을 바꿔서 해결하면 좋겟지만 현실은 냉정하듯 해당컬럼의 타입을 바꿀수 없는 상황이다.)

그리고 테이블에 동시에 여러 곳에서 입력이 빈번하게 일어난다고 한다. 입력시 키값이 듀플리케이션이 발생한다고 한다.  

 

1. MS SQL 시퀀스 만들기


 ①. Create a sequence table

CREATE TABLE SEQ_TAB
(
   seq_name   VARCHAR(64) PRIMARY KEY,
   cyclic_yn   CHAR(1) NOT NULL,
   seq_value   INT NOT NULL
)

 

 ②. Create a procedure to get sequence number
 

----------------------------------------------
-- 시퀀스 갖고 오는 프로시저
-- 작업성공이면 0보다 큰 수, 실패면 음수 반환
----------------------------------------------
create procedure sp_get_nextval
  @p_seq_name varchar(100),
  @v_seq_value int output
as
begin
  declare @v_cyclic_yn char(1)

  set @v_seq_value = -1

  begin transaction trans1

  select @v_cyclic_yn = cyclic_yn from seq_tab where seq_name = @p_seq_name

  if (@@rowcount = 0)
    return @v_seq_value -- 찾는 자료 없음
  else
  begin
    update seq_tab set @v_seq_value = seq_value = seq_value + 1 where seq_name = @p_seq_name

    -- 시퀀스가 순환이고, 현재 값이 int의 최대 값이면 0으로 되돌린다.
    if (@v_seq_value = 2147483647) and (@v_cyclic_yn = 'y')
    begin
      update seq_tab set seq_value = 0 where seq_name = @p_seq_name
    end

    commit transaction trans1
  end

  return @v_seq_value
end

 

 

1. 시간값으로

시간값으로 천분의 일초까지 지정 한후 별도의 sequence 테이블을 생성 201203270900000 + 0000  네자리를 추가한다.

 


 

'DB' 카테고리의 다른 글

sysdate  (0) 2013.07.19
JDBC FailOver  (0) 2012.07.30
DB2 rownum - oracle  (0) 2011.09.14
테라DB 관련 정보  (0) 2011.09.14
MSSQL TCP/IP 설정  (0) 2011.09.14
Posted by 에시드 :