@@IDENTITY(Transact-SQL)

업데이트: 2006년 12월 12일

마지막으로 삽입된 ID 값을 반환하는 시스템 함수입니다.

항목 링크 아이콘Transact-SQL 구문 표기 규칙

구문

@@IDENTITY

반환 유형

numeric(38,0)

주의

INSERT, SELECT INTO 또는 대량 복사 문이 완료된 후 @@IDENTITY에는 문에 의해 생성된 마지막 ID 값이 들어 있습니다. 문이 ID 열이 있는 테이블에 영향을 주지 않은 경우에 @@IDENTITY는 NULL을 반환합니다. 여러 행이 삽입되어 여러 ID 값이 생성되면 @@IDENTITY는 마지막으로 생성된 ID 값을 반환합니다. 문이 ID 값을 생성하는 삽입 작업을 수행하는 트리거를 하나 이상 실행하는 경우 문 바로 다음에 @@IDENTITY를 호출하면 트리거로 생성된 마지막 ID 값이 반환됩니다. ID 열이 있는 테이블에 대한 삽입 작업 후에 트리거가 실행되었고 이 트리거가 ID 열이 없는 다른 테이블에 삽입을 수행하는 경우 @@IDENTITY는 첫 번째 삽입의 ID 값을 반환합니다. INSERT나 SELECT INTO 문 또는 대량 복사가 실패했거나 트랜잭션이 롤백된 경우 @@IDENTITY 값은 이전 설정으로 되돌아가지 않습니다.

문 및 트랜잭션이 실패하면 테이블의 현재 ID가 변경되고 ID 열 값 간에 간격이 생성될 수 있습니다. 테이블에 값을 삽입하려고 시도한 트랜잭션이 커밋되지 않아도 ID 값은 롤백되지 않습니다. 예를 들어 IGNORE_DUP_KEY 위반으로 인해 INSERT 문이 실패할 경우 테이블의 현재 ID 값은 여전히 증가합니다.

@@IDENTITY, SCOPE_IDENTITY 및 IDENT_CURRENT는 모두 테이블의 IDENTITY 열에 삽입된 마지막 값을 반환한다는 점에서 서로 비슷한 함수입니다.

@@IDENTITY와 SCOPE_IDENTITY는 현재 세션의 테이블에서 생성된 마지막 ID 값을 반환합니다. 그러나 SCOPE_IDENTITY는 현재 범위 내에서만 값을 반환합니다. @@IDENTITY는 특정 범위로 제한되지 않습니다.

IDENT_CURRENT는 범위 및 세션으로 제한되지 않고 지정된 테이블로 제한됩니다. IDENT_CURRENT는 모든 세션과 범위에 있는 특정 테이블에 생성된 ID 값을 반환합니다. 자세한 내용은 IDENT_CURRENT(Transact-SQL)를 참조하십시오.

@@IDENTITY 함수의 범위는 이 함수를 실행 중인 로컬 서버의 현재 세션입니다. 이 함수는 원격 서버 또는 연결된 서버에 적용할 수 없습니다. 다른 서버의 ID 값을 가져오려면 해당 원격 서버 또는 연결된 서버에서 저장 프로시저를 실행하고 이 저장 프로시저(원격 서버 또는 연결된 서버의 컨텍스트에서 실행 중)에서 ID 값을 수집하여 로컬 서버의 호출 연결에 반환하도록 합니다.

@@IDENTITY 값은 복제 트리거 및 저장 프로시저 내에서 사용되므로 복제에 의해 영향을 받을 수 있습니다. 열이 복제 아티클의 일부인 경우 @@IDENTITY는 사용자가 만든 가장 최근 ID를 정확하게 표시하지 않습니다. @@IDENTITY 대신 SCOPE_IDENTITY() 함수 구문을 사용할 수 있습니다. 자세한 내용은 SCOPE_IDENTITY(Transact-SQL)의 "예" 섹션을 참조하십시오.

[!참고] SCOPE_IDENTITY() 함수를 사용하도록 호출하는 저장 프로시저나 Transact-SQL 문을 다시 작성해야 합니다. 이렇게 하면 복제에 사용되는 중첩 트리거 범위 내의 ID가 아니라 해당 사용자 문의 범위 내에서 사용되는 최신 ID가 반환됩니다.

다음 예에서는 ID 열(LocationID)이 있는 테이블에 행을 삽입하고 @@IDENTITY를 사용하여 새 행에 사용된 ID 값을 표시합니다.

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

참고 항목

참조

시스템 함수(Transact-SQL)
CREATE TABLE(Transact-SQL)
IDENT_CURRENT(Transact-SQL)
INSERT(Transact-SQL)
SCOPE_IDENTITY(Transact-SQL)
SELECT(Transact-SQL)

도움말 및 정보

SQL Server 2005 지원 받기

변경 내역

릴리스 내역

2006년 12월 12일

새로운 내용
  • @@IDENTITY 및 복제에 관한 정보를 추가했습니다.