SQL의 테이블(table)에서 ID값을 자동으로 증가하도록 설정한 경우, 최근에 삽입(INSERT)한 레코드(record)의 ID를 얻어와야 하는 경우가 있다. 이 값을 참조한 외래키(foreign key)를 사용해야 하는 경우가 대표적이다.
이때 사용할 수 있는 방법은 아래와 같다.
@identity 변수
SCOPE_IDENTITY() 함수
IDENT_CURRENT() 함수
1. @identity 변수 해당 구역 뿐만 아니라, 함수 호출등으로 인해 다른 테이블에 삽입된 것까지 포함하는 최신 레코드의 ID를 얻어온다. 이 때문에 해당 테이블에 트리거(trigger)가 걸려있고, 그 트리거에서 또 다른 테이블에 레코드를 삽입하는 경우 문제가 발생할 수 있다.
2. SCOPE_IDENTITY() 함수 현재 구역의 마지막으로 삽입된 테이블의 ID를 자겨오기 때문에 대부분의 경우에 대한 사용을 추천할 수 있다.
3. IDENT_CURRENT() 함수 괄호("()")안에 지정된 테이블의 마지막 레코드 ID를 가져오지만 세션(session)에 대한 구분이 없다. 즉 다른 세션에서 또다시 레코드가 삽입되면 그 값은 기대값과 다를 수 있다.
다음은 예제 SQL문이다.
USE AdventureWorks; GO
--Display the value of LocationID in the last row in the table. SELECT MAX(LocationID) FROM Production.Location; GO
INSERT INTO Production.Location (Name, CostRate, Availability, ModifiedDate) VALUES ('Damaged Goods', 5, 2.5, GETDATE()); GO
SELECT @@IDENTITY AS 'Identity'; GO
--Display the value of LocationID of the newly inserted row. SELECT MAX(LocationID) FROM Production.Location; GO