테이블에 자동증가 컬럼의 값이 추가되었고, 증가된 값을 반환하고 싶은 경우 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() 는 트랜잭션 내에서 일정한 값을 계속 유지하고 있으므로 이 값으로 사용하여야 한다.
'DBMS > SQL Server' 카테고리의 다른 글
[SQL Server] 프로시저 캐시 지우기 및 버퍼 메모리 비우기 (0) | 2016.01.10 |
---|---|
[SQL Server] DBCC CHECKIDENT 를 사용한 IDENTITY 값 초기화 (0) | 2015.08.20 |
[SQL Server] 저장 프로시저 일괄 실행 권한 주기 (0) | 2015.08.07 |
[SQL Server] AWE 옵션 (0) | 2015.06.10 |
[SQL Server] 성능 모니터에 SQL Server 성능 카운터가 나타나지 않을 때 (0) | 2015.03.20 |