집 >데이터 베이스 >MySQL 튜토리얼 >SQL Server의 `SCOPE_IDENTITY()`, `IDENTITY()`, `@@IDENTITY` 및 `IDENT_CURRENT()`의 차이점은 무엇입니까?
SCOPE_IDENTITY()
, IDENTITY()
, @@IDENTITY
, IDENT_CURRENT()
함수에 대한 심층적인 이해SCOPE_IDENTITY()
, IDENTITY()
, @@IDENTITY
및 IDENT_CURRENT()
는 모두 SQL Server에서 자동 증가 열 값을 검색하는 데 사용되지만 용도가 다릅니다. 차이점을 자세히 살펴보겠습니다.
SCOPE_IDENTITY()
SCOPE_IDENTITY()
현재 범위(현재 문 또는 배치일 수 있음)에서 마지막으로 삽입된 자동 증가 열 값을 검색합니다. 동일한 세션 내 다른 범위에서 생성된 자동 증가 열 값은 고려하지 않습니다.
IDENTITY()
이름과 달리 IDENTITY()
은 자동 증가하는 열 값을 검색하는 데 사용되지 않습니다. 다른 테이블의 데이터에서 새 테이블을 파생할 때 자동 증가 열을 생성하기 위해 SELECT...INTO
문에서 사용됩니다.
@@IDENTITY
@@IDENTITY
범위에 관계없이 현재 세션에서 마지막으로 삽입된 자동 증가 열 값을 검색합니다. 이는 동일한 세션 중에 현재 범위와 다른 범위에서 생성된 자동 증가 열 값을 포함한다는 의미입니다.
IDENT_CURRENT()
IDENT_CURRENT()
은 전체 세션에서도 특정 테이블이나 뷰에 마지막으로 삽입된 자동 증가 열 값을 검색하도록 설계된 덜 사용되는 함수입니다.
각 기능은 언제 사용하나요?
일반적으로 SCOPE_IDENTITY()
은 현재 범위 내에서 격리를 제공하므로 선호됩니다. 동일한 범위의 상위 문이나 저장 프로시저에서 생성된 자동 증가 열 값을 참조해야 하는 경우 SCOPE_IDENTITY()
가 정확성을 보장합니다.
@@IDENTITY
세션 내 다른 범위에서 생성된 자동 증가 열 값에 액세스할 때 유용합니다. 예를 들어 동일한 세션에서 여러 작업이 발생할 때 트리거 또는 일괄 작업에서 사용할 수 있습니다.
IDENT_CURRENT()
은 다양한 데이터 소스의 데이터를 연결할 때와 같이 여러 세션에 걸쳐 특정 테이블의 자동 증가 열 값에 액세스해야 하는 시나리오에서 주로 사용됩니다.
예:
다음 코드 조각을 고려하세요.
<code class="language-sql">-- 向'Customers'表插入一条记录 INSERT INTO Customers (Name) VALUES ('John Doe'); -- 检索当前语句中生成的自增列值 SELECT SCOPE_IDENTITY(); -- 触发器触发并插入另一条记录 CREATE TRIGGER InsertAudit ON Customers AFTER INSERT AS INSERT INTO AuditLog (CustomerId, Action) VALUES (@@IDENTITY, 'INSERT'); -- 检索触发器生成的自增列值 SELECT @@IDENTITY;</code>
이 예에서 SCOPE_IDENTITY()
는 "Customers" 테이블에 삽입된 레코드의 자동 증가 열 값을 반환하고, @@IDENTITY
은 감사 로그 항목 이후 트리거에 의해 생성된 자동 증가 열 값을 반환합니다. 삽입됩니다. 이는 @@IDENTITY
을 사용하여 범위가 다르면 결과가 어떻게 달라질 수 있는지 보여줍니다.
위 내용은 SQL Server의 `SCOPE_IDENTITY()`, `IDENTITY()`, `@@IDENTITY` 및 `IDENT_CURRENT()`의 차이점은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!