SQL SERVER 2000에서의 식별 값 가져오기 함수 SQL Server 2000에서는 아이덴티티 컬럼이 IDENTITY로 정의되며, 다음은 마지막으로 삽입된 레코드의 아이덴티티 값을 얻는 것과 관련이 있습니다
오프의 함수 예시
SQL Server에서는 SCOPE_IDENTITY(), @@IDENTITY, IDENT_CURRENT()를 사용해 마지막으로 삽입된 레코드의 값을 얻을 수 있으며, 이 두 레코드의 차이는 다음과 같습니다: SCOPE_IDENTITY()는 동일한 범위 내 IDENTITY 열에 삽입된 마지막 IDENTITY 값을 반환합니다. 스코프는 모듈입니다 - 저장 프로시저, 트리거, 함수
숫자나 배치. 따라서 두 문장이 동일한 저장 프로시저, 함수 또는 배치에 속해 있다면, 동일한 범위에 속합니다. @@IDENTITY 현재 세션의 모든 테이블에서 생성된 마지막 식별 값을 반환합니다. IDENT_CURRENT()는 지정된 테이블에 대해 세션과 범위에서 생성된 마지막 식별 값을 반환합니다 그들의 차이를 설명할 예를 들어
-- a) 샘플 코드 -- =========================================== -- 테스트 테이블 생성 -- =========================================== TEMPDB 사용 가세요
CREATE table t1(id int IDENTITY,col int) T1 삽입 선택 1 유니언 올 셀렉트 2 CREATE table t2(id int IDENTITY,col int) 가세요
T2에 트리거 TR_insert_t2 생성 삽입 자료 AS 삽입 t1 선택 3 가세요
-- =========================================== -- 세 가지 함수 테스트: 1 -- =========================================== t2 값 삽입(1) SELECT [SCOPE_IDENTITY()]=SCOPE_IDENTITY(), [@@IDENTITY]=@@IDENTITY, [IDENT_CURRENT() T1에 대해] = IDENT_CURRENT(N't1'), [IDENT_CURRENT() t2에 대해] = IDENT_CURRENT(N't2')
/*--결과 SCOPE_IDENTITY() @@IDENTITY IDENT_CURRENT() t1 IDENT_CURRENT() t2 ------------------ ------------ -------------------------- ----------------------- 1 3 3 1
(영향을 받는 행 수는 1행입니다) --*/ 가세요
-- =========================================== -- 세 가지 함수 테스트: 2 -- =========================================== t1 값 삽입(10) SELECT [SCOPE_IDENTITY()]=SCOPE_IDENTITY(), [@@IDENTITY]=@@IDENTITY, [IDENT_CURRENT() T1에 대해] = IDENT_CURRENT(N't1'), [IDENT_CURRENT() t2에 대해] = IDENT_CURRENT(N't2')
/*--결과 SCOPE_IDENTITY() @@IDENTITY IDENT_CURRENT() t1 IDENT_CURRENT() t2 ------------------ ------------ -------------------------- ----------------------- 4 4 4 1
(영향을 받는 행 수는 1행입니다) --*/ 가세요
-- =========================================== -- 세 가지 함수 테스트: 3 -- ** 새 연결을 열고 다음 코드를 실행하세요 ** -- =========================================== SELECT [SCOPE_IDENTITY()]=SCOPE_IDENTITY(), [@@IDENTITY]=@@IDENTITY, [IDENT_CURRENT() T1에 대해] = IDENT_CURRENT(N't1'), [IDENT_CURRENT() t2에 대해] = IDENT_CURRENT(N't2')
/*--결과 SCOPE_IDENTITY() @@IDENTITY IDENT_CURRENT() t1 IDENT_CURRENT() t2 ------------------ ------------ -------------------------- ----------------------- NULL 너무 4 & n
--=========================================== -- 테스트 환경을 삭제합니다 -- =========================================== 테이블 T1, T2 드롭
-- b) 코드 결과 설명 위 코드에서 보시다시피: IDENT_CURRENT()는 항상 지정된 테이블에 마지막으로 삽입된 값을 반환합니다 @@IDENTITY 동일한 범위 내에 있든 없든 현재 세션의 식별 값을 반환합니다. 테스트 1과 2에서는 트리거에 삽입된 레코드의 식별 값을 반환하는 것을 알 수 있고,
테스트 3에서는 현재 세션에 삽입 레코드가 없으므로 NULL이 반환됩니다 SCOPE_IDENTITY()는 현재 세션의 동일한 범위의 식별 값을 반환하므로, 테스트 1, 2에서는 트리거에 영향을 받지 않는 값을 반환하고, 테스트 3에서는 현재 세션이 보간되지 않기 때문에 반환됩니다
레코드를 반환하므로 NULL이 반환됩니다
|