반응형
테이블에 자동증가 컬럼의 값이 추가되었고, 증가된 값을 반환하고 싶은 경우 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() 는 트랜잭션 내에서 일정한 값을 계속 유지하고 있으므로 이 값으로 사용하여야 한다.
반응형
'DB > MSSQL' 카테고리의 다른 글
[MSSQL] JOIN의 종류설명 및 사용법 & 예제 (0) | 2020.04.29 |
---|---|
OUTPUT 절 (insert,update,delete) (0) | 2020.04.23 |
MS-SQL 특정 단어 검색하기 (0) | 2020.04.21 |
[MSSQL] MySql의 LIMIT 구현 OFFSET / FETCH NEXT (0) | 2020.04.17 |
MS-SQL 테이블 컬럼 조작(추가,수정,삭제) (0) | 2020.04.14 |