반응형
IDENTITY 는 마지막으로 삽입된 ID 값을 반환해준다. Insert, Select INTO 또는 대량 복사 문이 완료된 후 @@IDENTITY에는 마지막 생성된 ID 값이 들어 있다. 만약 영향이 없다면 NULL 을 반환한다. IDENTITY 를 공부하며 추가적으로 상황에 맞는 ID 값을 가져오는 방법들을 정리했다.
@@IDENTITY
먼저 '@@' 의 의미부터 알아보자. '@@' 의 의미는 세션을 뜻한다. '@@IDENTITY' 를 풀이하면 '해당 세션에서 마지막으로 삽인된 ID 값을 반환한다.' 는 뜻이다.
SELECT @@IDENTITY
IDENT_CURRENT('테이블명')
특정 테이블에 대해서 한정 지을때 사용한다. 특졍 세션과 범위에 있는 테이블에 대한 마지막 ID 값을 반환한다.
SELECT IDENT_CURRENT('테이블명')
SCOPE_IDENTITY()
현재 세션, 범위에 있는 테이블에 대해 생성된 마지막ID 값을 반환한다. 개인적으로 해당 함수로 자주 사용한다.
왜냐하면 IDENTITY 는 해당 테이블에 대해서 여러번 변경이 되었을 경우 내가 원하는 값이 아닌 최종 변경된 값을 반환이 된다. SCOPE_IDENTITY 는 내가 제한한 프로세스 + 세션에 대한 IDENTITY 값을 반환해주기 때문에 가장 신뢰할 수 있다.
SELECT SCOPE_IDENTITY()
초기화하기
특정 테이블의 Identity 한 Column 을 초기화 한다.
DBCC CHECKIDENT('table name', reseed, 초기값)
-- ex) DBCC CHECKIDENT('TABLE', reseed, 0)
실행 후 현재 ID 값과 일차하지는 확인을 한다.
DBCC CHECKIDENT('table name', noreseed)
-- ex) DBCC CHECKIDENT('TABLE', noreseed)
주의! 데이터를 임시 삭제하고 IDENTITY 값을 초기화하면 ID 값과 컬럼값은 일치하지 않는다.
반응형
'Database > MSSQL' 카테고리의 다른 글
[MSSQL] SSMS 데이터 가져오기/내보내기 엑셀 오류 - 공급자는 로컬 컴퓨터에 등록할 수 없습니다. (0) | 2022.06.17 |
---|---|
[MSSQL] SSMS 줄 번호 보이기/숨기기 (1) | 2022.06.16 |
[MSSQL] ERROR - 변경 내용을 저장할 수 없습니다. (0) | 2022.06.14 |
[MSSQL] 데이터베이스 SQL 질의어 (DDL, DML, DCL, TCL) (1) | 2022.06.03 |
[MSSQL] 컬럼(Column) 추가, 수정 (0) | 2022.06.02 |
댓글