>데이터 베이스 >MySQL 튜토리얼 >SQL Server에서 `@@IDENTITY`, `SCOPE_IDENTITY()`, `IDENT_CURRENT()` 및 `IDENTITY()`의 차이점은 무엇입니까?

SQL Server에서 `@@IDENTITY`, `SCOPE_IDENTITY()`, `IDENT_CURRENT()` 및 `IDENTITY()`의 차이점은 무엇입니까?

Linda Hamilton
Linda Hamilton원래의
2025-01-20 13:04:11878검색

What's the Difference Between `@@IDENTITY`, `SCOPE_IDENTITY()`, `IDENT_CURRENT()`, and `IDENTITY()` in SQL Server?

SQL Server ID 기능: 세부 비교

@@IDENTITY, SCOPE_IDENTITY(), IDENT_CURRENT()IDENTITY()은 모두 SQL Server의 ID 열에서 값을 검색하는 것과 관련이 있지만 범위와 적용 면에서 크게 다릅니다.

SQL Server ID 함수의 범위 이해

"범위"는 ID 값이 생성되는 컨텍스트를 나타냅니다. 이는 다음과 같습니다.

  • 세션 범위: 현재 데이터베이스 연결
  • 쿼리/저장 프로시저 범위: 쿼리 또는 저장 프로시저의 현재 실행 블록

기능 분석

  • @@IDENTITY: 범위(쿼리, 저장 프로시저 또는 트리거)에 관계없이 현재 세션에서 생성된 마지막 ID 값을 반환합니다.

  • SCOPE_IDENTITY(): 현재 세션 및 범위 내에서 생성된 마지막 ID 값을 반환합니다. 보다 정확한 결과를 제공하기 때문에 가장 일반적으로 권장되는 기능입니다.

  • IDENT_CURRENT('table_name'): 세션이나 범위에 관계없이 특정 테이블에 대해 생성된 마지막 ID 값을 반환합니다. 이는 다양한 세션이나 컨텍스트에서 특정 테이블에 대한 마지막 ID 값이 필요할 때 유용합니다.

  • IDENTITY(): 이는 ID 값을 검색하는 데 사용되지 않습니다. SELECT ... INTO 구문을 사용하여 테이블을 생성할 때 ID 컬럼을 정의하는 데 사용되는 키워드입니다.

예시 시나리오

차이점을 강조하기 위해 다양한 시나리오를 살펴보겠습니다.

  • 단일 INSERT 문: 단일 INSERT 문으로 행을 추가하면 SCOPE_IDENTITY()@@IDENTITY은 동일한 값을 반환합니다.

  • 트리거 기반 삽입: 트리거가 첫 번째 테이블의 INSERT 다음에 두 번째 테이블에 행을 삽입하는 경우 SCOPE_IDENTITY()는 현재 문에 직접 영향을 받는 테이블의 ID를 반환합니다. (첫 번째 테이블) @@IDENTITY은 세션에서 마지막으로 영향을 받은 테이블(두 번째 테이블일 수 있음)에서 ID를 반환합니다.

올바른 기능 선택

대부분의 경우 SCOPE_IDENTITY()는 상황별 결과를 제공하므로 선호됩니다. @@IDENTITY은 세션 내 출처와 관계없이 최신 ID 값이 필요할 때 유용합니다. IDENT_CURRENT()은 현재 세션에 관계없이 특정 테이블에 대한 마지막 ID 값이 필요할 때 중요합니다. IDENTITY()은 해당 값을 검색하는 것이 아니라 ID 열을 정의하기 위한 것임을 기억하세요.

위 내용은 SQL Server에서 `@@IDENTITY`, `SCOPE_IDENTITY()`, `IDENT_CURRENT()` 및 `IDENTITY()`의 차이점은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.