반응형

IDENT_CURRENT(), SCOPE_IDENTITY(), 그리고 @@IDENTITY는 모두 SQL Server에서 IDENTITY 값을 반환하는 데 사용됩니다. 하지만 이들 간에는 몇 가지 차이점이 있습니다. 반환된 값이 현재 세션과 범위에 따라 다를 수 있으므로, 사용할 때는 주의해야 합니다.

IDENT_CURRENT()

IDENT_CURRENT() 함수는 임의 세션 및 범위에 있는 특정 테이블에 생성된 IDENTITY 값을 반환합니다. 현재 세션이 아닌 다른 세션에서 해당 테이블에 마지막으로 데이터가 INSERT된 경우 그 값을 가져오므로 주의해야 합니다.

또한 지정한 테이블에 데이터가 하나도 없는 경우에 0이 아닌 1이 리턴되는 점도 유의할 필요가 있습니다.

예를 들어, 아래의 쿼리는 "Orders" 테이블에서 마지막으로 생성된 IDENTITY 값을 반환합니다.

SELECT IDENT_CURRENT('Orders');

SCOPE_IDENTITY()

SCOPE_IDENTITY() 함수는 현재 세션 및 범위 내에서 마지막으로 생성된 IDENTITY 값을 반환합니다. 이 함수는 현재 실행 중인 스크립트 또는 저장 프로시저에서 마지막으로 생성된 IDENTITY 값을 반환합니다. 다른 세션이나 트리거에서 생성된 IDENTITY 값은 반환하지 않습니다.

예를 들어, 아래의 쿼리는 "Orders" 테이블에 새로운 행을 삽입하고, 해당 행의 IDENTITY 값을 반환합니다.

INSERT INTO Orders (CustomerID, OrderDate) 
VALUES ('ALFKI', '2023-01-01'); 

SELECT SCOPE_IDENTITY();

@@IDENTITY

@@IDENTITY 함수는 현재 세션에서 마지막으로 생성된 IDENTITY 값을 반환합니다.  만약 테이블에 트리거가 있고, 트리거에서 다른 테이블에 삽입된 행이 IDENTITY 값이 있는 경우 이를 반환 하게 되므로 사용에 주의 해야 합니다.

 

 

반응형

+ Recent posts