본문 바로가기

DBMS/SQL Server

[SQL Server] SCOPE_IDENTITY(), IDENT_CURRENT(), @@IDENTITY

 

테이블에 자동증가 컬럼의 값이 추가되었고, 증가된 값을 반환하고 싶은 경우 SCOPE_IDENTITY(), IDENT_CURRENT(), @@IDENTITY 함수를 사용하여 원하는 값을 얻을 수 있다.

 

세 함수는 자동증가 컬럼에 삽입된 값을 반환하기 때문에 비슷한 함수이지만, 차이점이 있어 주의해서 사용해야 한다.

 

아래의 결과를 보면 같은 값을 반환한다.

 

 CREATE TABLE dbo.TEST_TBL (

    COL1   INT           IDENTITY(1,1)

  , COL2   VARCHAR(10)

 )

 GO

 

 INSERT INTO dbo.TEST_TBL (COL2) VALUES ('ABC')

 INSERT INTO dbo.TEST_TBL (COL2) VALUES ('DEF')

 INSERT INTO dbo.TEST_TBL (COL2) VALUES ('GHI')

 GO

 

 SELECT @@IDENTITY                    AS '@@IDENTITY'

      , SCOPE_IDENTITY()              AS 'SCOPE_IDENTITY()'

      , IDENT_CURRENT('TEST_TBL')     AS 'IDENT_CURRENT()'

 GO

 

 

 

그렇다면 세 함수의 차이점은 무엇일까?

 

IDENT_CURRENT() 는 범위와 세션으로 제한되는 것이 아니라 지정된 테이블로 제한된다.

SCOPE_IDENTITY() 와 @@IDENTITY 는 현재 세션의 테이블에서 생성된 마지막 자동증가 컬럼을 반환한다.

그러나 SCOPE_IDENTITY() 는 현재 범위 내에 삽입된 값을 반환하고, @@IDENTITY 는 특정 범위로 제한되지 않는 차이점이 있다.

 

@@IDENTITY 는 트랜잭션 내에 여러번의 자동증가 컬럼이 있는경우 @@IDENTITY 값이 변하기 때문에 사용하는 것을 자제해야하고, SCOPE_IDENTITY() 는 트랜잭션 내에서 일정한 값을 계속 유지하고 있으므로 이 값으로 사용하여야 한다.