프로그래밍/MS_SQL
MSSQL 자동 증가 시드값 가져오기
GOHA
2015. 4. 27. 14:41
728x90
MS SQL 자동 증가 시드값 가져오는 방법
1. IDENT_CURRENT('특정테이블명')
- 특정 테이블에 한정할 수 있음
- 특정 세션과 범위에 있는 테이블에 대한 마지막 ID 값을 반환함
- SELECT IDENT_CURRENT('테이블명')
2. @@IDENTITY
- 전체 범위에 대한 현제 세션에 있는 테이블에 대해 생성된 마지막 ID 값을 반환함
- SELECT @@IDENTITY()
3. SCOPE_IDENTITY()
- 현제 세션, 범위에 있는 테이블에 대해 생성된 마지막 ID 값을 반환함
- SELECT SCOPE_IDENTITY()
4. 각 함수 및 전역변수 차이점
- IDENT_CURRENT 는 세션과 상관없이 특정 테이블 시드값을 가져옴
- @@IDENTITY,SCOPE_IDENTITY() 은 해당 세션만 유효
- @@IDENTITY 연쇄적으로 발생해도 최종 시드값을 가져옴
- SCOPE_IDENTITY() 연쇄적으로 발생해도 최초 시드값을 가져옴
- -- 1부터 시작하는 IDENTITY 값을 가지고 있는 TEMP1 테이블
- CREATE TABLE TEMP1 ( Seq INT IDENTITY(1,1) )
- GO
- -- 1000부터 시작하는 IDENTITY 값을 가지고 있는 TEMP2 테이블
- CREATE TABLE TEMP2 ( Seq INT IDENTITY(1000,1) )
- GO
- -- 트리거 만들기
- -- #TEMP1 에 값이 들어가면 TEMP2 에도 값을 넣어주는 트리거만들기
- CREATE TRIGGER TEMP1_I ON TEMP1 FOR INSERT
- AS
- BEGIN
- INSERT INTO TEMP2 DEFAULT VALUES
- END
- ----------------------------------------------------------------------------
- --
- -- 테스트 상황 1
- -- 같은 세션인 경우
- -- TEMP1에 값을 넣었을때 IDENT_CURRENT('특정테이블명'), @@IDENTITY, SCOPE_IDENTITY()
- -- 각각 어떤 값을 가져오느냐 테스트
- --
- ----------------------------------------------------------------------------
- -- 1. INSERT
- INSERT INTO TEMP1 DEFAULT VALUES
- -- 2. @@IDENTITY
- SELECT @@IDENTITY --> 결과값: 1000, TEMP2의 마지막 Identity값 가져옴
- -- 3. SCOPE_IDENTITY()
- SELECT SCOPE_IDENTITY() --> 결과값: 1, TEMP1의 마지막 Identity값 가져옴
- -- 4. IDENT_CURRENT('특정테이블명')
- SELECT IDENT_CURRENT('TEMP1') --> 결과값: 1, TEMP1의 마지막 Identity값 가져옴
- SELECT IDENT_CURRENT('TEMP2') --> 결과값: 1000, TEMP2의 마지막 Identity값 가져옴
- ----------------------------------------------------------------------------
- --
- -- 테스트 상황 2
- -- 다른 세션인 경우
- -- 다른 세션에서 값을 넣었을때 IDENT_CURRENT('특정테이블명'), @@IDENTITY, SCOPE_IDENTITY()
- -- 각각 어떤 값을 가져오느냐 테스트
- --
- ----------------------------------------------------------------------------
- -- 1. @@IDENTITY
- SELECT @@IDENTITY --> 결과값: NULL
- -- 2. SCOPE_IDENTITY()
- SELECT SCOPE_IDENTITY() --> 결과값: NULL
- -- 3. IDENT_CURRENT('특정테이블명')
- SELECT IDENT_CURRENT('TEMP1') --> 결과값: 1, TEMP1의 마지막 Identity값 가져옴
- SELECT IDENT_CURRENT('TEMP2') --> 결과값: 1000, TEMP2의 마지막 Identity값 가져옴
728x90