728x90

MS SQL 자동 증가 시드값 가져오는 방법

 

1. IDENT_CURRENT('특정테이블명')

- 특정 테이블에 한정할 수 있음

- 특정 세션과 범위에 있는 테이블에 대한 마지막 ID 값을 반환함

  1. SELECT IDENT_CURRENT('테이블명')  

 

 

 

2. @@IDENTITY

- 전체 범위에 대한 현제 세션에 있는 테이블에 대해 생성된 마지막 ID 값을 반환함

  1. SELECT @@IDENTITY()  

 

 

3. SCOPE_IDENTITY()

- 현제 세션, 범위에 있는 테이블에 대해 생성된 마지막 ID 값을 반환함

  1. SELECT SCOPE_IDENTITY()  

 

 

 

 

4. 각 함수 및 전역변수 차이점

- IDENT_CURRENT 는 세션과 상관없이 특정 테이블 시드값을 가져옴

- @@IDENTITY,SCOPE_IDENTITY() 은 해당 세션만 유효

- @@IDENTITY 연쇄적으로 발생해도 최종 시드값을 가져옴

- SCOPE_IDENTITY() 연쇄적으로 발생해도 최초 시드값을 가져옴 

  1. -- 1부터 시작하는 IDENTITY 값을 가지고 있는 TEMP1 테이블  
  2. CREATE  TABLE   TEMP1 ( Seq INT IDENTITY(1,1) )       
  3. GO  
  4. -- 1000부터 시작하는 IDENTITY 값을 가지고 있는 TEMP2 테이블  
  5. CREATE  TABLE   TEMP2 ( Seq INT IDENTITY(1000,1) )  
  6. GO  
  7.   
  8. -- 트리거 만들기  
  9. -- #TEMP1 에 값이 들어가면 TEMP2 에도 값을 넣어주는 트리거만들기  
  10. CREATE  TRIGGER TEMP1_I ON TEMP1 FOR INSERT  
  11. AS   
  12. BEGIN  
  13.     INSERT INTO TEMP2 DEFAULT VALUES   
  14. END  
  15.   
  16. ----------------------------------------------------------------------------  
  17. --  
  18. -- 테스트 상황 1  
  19. -- 같은 세션인 경우  
  20. -- TEMP1에 값을 넣었을때 IDENT_CURRENT('특정테이블명'), @@IDENTITY, SCOPE_IDENTITY()   
  21. -- 각각 어떤 값을 가져오느냐 테스트  
  22. --   
  23. ----------------------------------------------------------------------------  
  24.   
  25. -- 1. INSERT   
  26. INSERT INTO TEMP1 DEFAULT VALUES  
  27.   
  28. -- 2. @@IDENTITY  
  29. SELECT  @@IDENTITY   --> 결과값: 1000, TEMP2의 마지막 Identity값 가져옴  
  30.   
  31. -- 3. SCOPE_IDENTITY()     
  32. SELECT  SCOPE_IDENTITY()  --> 결과값: 1, TEMP1의 마지막 Identity값 가져옴  
  33.   
  34. -- 4. IDENT_CURRENT('특정테이블명')   
  35. SELECT  IDENT_CURRENT('TEMP1')  --> 결과값: 1, TEMP1의 마지막 Identity값 가져옴  
  36. SELECT  IDENT_CURRENT('TEMP2')  --> 결과값: 1000, TEMP2의 마지막 Identity값 가져옴  
  37.   
  38.   
  39. ----------------------------------------------------------------------------  
  40. --  
  41. -- 테스트 상황 2  
  42. -- 다른 세션인 경우  
  43. -- 다른 세션에서 값을 넣었을때 IDENT_CURRENT('특정테이블명'), @@IDENTITY, SCOPE_IDENTITY()   
  44. -- 각각 어떤 값을 가져오느냐 테스트  
  45. --   
  46. ----------------------------------------------------------------------------  
  47.   
  48. -- 1. @@IDENTITY  
  49. SELECT  @@IDENTITY   --> 결과값: NULL  
  50.   
  51. -- 2. SCOPE_IDENTITY()     
  52. SELECT  SCOPE_IDENTITY()  --> 결과값: NULL  
  53.   
  54. -- 3. IDENT_CURRENT('특정테이블명')   
  55. SELECT  IDENT_CURRENT('TEMP1')  --> 결과값: 1, TEMP1의 마지막 Identity값 가져옴  
  56. SELECT  IDENT_CURRENT('TEMP2')  --> 결과값: 1000, TEMP2의 마지막 Identity값 가져옴

 

출처 : http://rocabilly.tistory.com/26  

728x90

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

MSSQL 테이블 COMMENT 보기  (0) 2015.04.29
MSSQL IDENTITY 값 재 설정  (0) 2015.04.27
sqlexpress 백업 및 복원  (0) 2015.04.24
mssql 파일 크기 줄이기  (0) 2015.04.14
MSSQL COMMENTS 생성  (0) 2015.04.13

+ Recent posts