다음을 통해 공유


@@IDENTITY(Transact-SQL)

적용 대상:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceMicrosoft Fabric의 SQL 데이터베이스

@@IDENTITY 는 마지막으로 삽입된 항등성 값을 반환하는 시스템 함수입니다.

Transact-SQL 구문 표기 규칙

구문

@@IDENTITY  

반환 형식

numeric(38,0)

설명

, SELECT INTO, 또는 벌크 복사 문장이 완료된 후INSERT, 문 @@IDENTITY 장이 생성한 마지막 식별 값을 포함합니다.

  • 만약 문장이 항등성 열을 가진 테이블에 영향을 미치지 않았다면, @@IDENTITY 를 반환합니다 NULL.
  • 여러 행이 삽입되어 여러 정체성 값이 생성되면, @@IDENTITY 마지막으로 생성된 정체성 값을 반환합니다.
  • 문장이 하나 이상의 트리거를 발동하여 삽입하여 식별 값을 생성하면, 문장 직후 호출 @@IDENTITY 하면 트리거가 생성한 마지막 식별 값을 반환합니다.
  • 만약 트리거가 정체성 열이 있는 테이블에서 삽입 작업 후에 트리거가 발생하고, 그 트리거가 식별 열이 없는 다른 테이블에 삽입하면, @@IDENTITY 첫 번째 삽입 테이블의 식별 값을 반환합니다. 또는 또는 SELECT INTO 또는 대용량 복사본이 실패하거나 트랜잭션이 롤백되더라도 값은 @@IDENTITY 이전 설정 INSERT 으로 되돌아가지 않습니다.

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

@@IDENTITY SCOPE_IDENTITY, , IDENT_CURRENT , 는 모두 테이블의 열에 IDENTITY 삽입된 마지막 값을 반환하기 때문에 유사한 함수입니다.

  • @@IDENTITY 그리고 SCOPE_IDENTITY 현재 세션 내 임의의 테이블에서 생성된 마지막 정체성 값을 반환합니다. 하지만 , 값 SCOPE_IDENTITY 은 현재 범위 내에서만 반환되며, @@IDENTITY 특정 범위에 국한되지 않습니다.

  • IDENT_CURRENT 범위와 회기의 제한이 없다; 지정된 테이블로 제한됩니다. IDENT_CURRENT 특정 세션과 범위에서 생성된 정체성 값을 반환합니다. 자세한 내용은 IDENT_CURRENT(Transact-SQL)를 참조하세요.

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

복제는 복제 트리거와 저장 프로시저 내에서 사용되기 때문에 값에 @@IDENTITY 영향을 줄 수 있습니다. @@IDENTITY 복제 문서의 일부인 경우 해당 열은 가장 최근 사용자 생성 신원을 신뢰할 수 있는 지표가 아닙니다. 함수 구문을 @@IDENTITY사용할 SCOPE_IDENTITY() 수 있습니다. 자세한 내용은 SCOPE_IDENTITY(Transact-SQL)를 참조하세요.

참고

복제에 사용되는 중첩 트리거 범위 내의 ID가 아니라 해당 사용자 명령문의 범위 내에서 사용되는 최신 ID를 반환할 SCOPE_IDENTITY() 함수를 사용하도록 호출하는 저장 프로시저 또는 Transact-SQL 문을 다시 작성해야 합니다.

예제

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

USE AdventureWorks2022;  
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