DB/MSSQL
SCOPE_IDENTITY(), IDENT_CURRENT(), @@IDENTITY : 마지막 insert한 값 select 하기
Calssess
2020. 4. 22. 16:08
반응형
테이블에 자동증가 컬럼의 값이 추가되었고, 증가된 값을 반환하고 싶은 경우 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() 는 트랜잭션 내에서 일정한 값을 계속 유지하고 있으므로 이 값으로 사용하여야 한다.
반응형