이 글은 기계 번역의 미러 문서이며, 원본 기사로 바로 이동하려면 여기를 클릭해 주세요.

보기: 12386|회답: 0

[출처] SqlServer는 새로 삽입된 레코드의 ID를 구현합니다

[링크 복사]
게시됨 2016. 6. 15. 오전 11:45:40 | | |

출처: 인터넷 저자: 미상

- 데이터베이스 및 테이블 생성

데이터베이스 생성 MyDataBase

MyDataBase를 사용하세요

create table mytable

id int 항등식(1,1),

이름: 바르차르(20)



--이 SQL을 실행하여 방금 삽입된 레코드에 대응하는 자기 증가 열의 값을 찾습니다

mytable 값('Li Si')에 삽입

선택권@@identity

2. 세 가지 방법의 비교

SQL Server 2000에는 SCOPE_IDENTITY, IDENT_CURRENT, @@IDENTITY 세 가지 유사한 기능이 있으며, 모두 IDENTITY 열에 반환 값이 삽입됩니다.

IDENT_CURRENT 특정 세션과 범위에서 생성된 마지막 식별 값을 반환합니다. IDENT_CURRENT 범위나 세션에 제한되지 않고, 지정된 테이블에 의해 제한됩니다. IDENT_CURRENT 특정 세션과 범위에서 생성된 값을 반환합니다.

@@IDENTITY 현재 세션의 모든 범위에 있는 테이블에 대해 생성된 마지막 식별 값을 반환합니다.

SCOPE_IDENTITY 현재 세션에 대해 마지막으로 생성된 값과 현재 범위 내 모든 테이블을 반환합니다

SCOPE_IDENTITY와 @@IDENTITY는 현재 세션의 어떤 테이블에서든 생성된 마지막 식별 값을 반환합니다. 하지만 SCOPE_IDENTITY은 현재 범위에 삽입된 값만 반환합니다; @@IDENTITY 특정 범위에 국한되지 않습니다.

예를 들어, INSERT 트리거가 정의된 T1과 T2 두 개의 테이블이 있습니다. T1에 행이 삽입되면 트리거가 작동하고 T2에 행이 삽입됩니다. 이 예시는 트리거 결과로 T1과 T2에 각각 다른 스코프가 있음을 보여줍니다.

T1과 T2 모두 IDENTITY 열을 가진다고 가정하면, @@IDENTITY와 SCOPE_IDENTITY는 T1의 INSERT 문장 끝에서 서로 다른 값을 반환합니다.

@@IDENTITY 현재 세션의 스코프에 삽입된 마지막 IDENTITY 열 값을 반환하며, 이는 T2에 삽입된 값입니다.

SCOPE_IDENTITY()는 T1에 삽입된 IDENTITY 값을 반환하는데, 이는 동일한 범위에서 마지막으로 발생한 INSERT입니다. 만약 SCOPE_IDENTITY() 함수가 식별 열에 삽입 문장이 범위에서 발생하기 전에 호출되면, 함수는 NULL 값을 반환합니다.

IDENT_CURRENT('T1')와 IDENT_CURRENT('T2')가 반환하는 값은 각각 두 테이블의 마지막 자기 증가 값입니다.

AJQC의 실험: (40개의 로컬 스레드, 40+40개의 원격 스레드가 동시에 테스트, 1200W 행 삽입), 결론은 다음과 같습니다:

1. 일반적인 계단식 응용에서. @@IDENTITY 사용할 수 없으며, CII850 256M SD 기기에서 1W가 다중 행 전송될 경우 동시 충돌이 발생할 수 있습니다. P42.8C와 512M DDR에서는 6000개 이상의 회선만 있을 때 동시 충돌이 발생합니다.

2.SCOPE_IDENTITY()는 절대적으로 신뢰할 수 있으며 저장 과정에서 사용할 수 있으며, 트리거도 만들 필요가 없고 동시 충돌도 없습니다

SELECT IDENT_CURRENT('TableName') - 지정된 테이블에서 생성된 마지막 라벨 값을 반환합니다

SELECT IDENT_INCR('TableName') - 지정된 테이블에 대해 표시된 필드 증가 값을 반환합니다

SELECT IDENT_SEED('TableName') - 지정된 테이블의 표시된 필드 시드 값을 반환합니다

마지막으로 삽입된 레코드의 자동 번호를 반환합니다

선택 IDENT_CURRENT('테이블 이름')

다음 자동 번호로 돌아가기:

SELECT IDENT_CURRENT('TableName')+(SELECT IDENT_INCR('TableName'))

SELECT @@IDENTITY - 현재 세션의 모든 테이블에서 생성된 마지막 표시된 값을 반환합니다.








이전의:SQLServer는 문자열 분할의 범용 방법을 구현합니다
다음:유용한 검색 산물을 공유하세요
면책 조항:
Code Farmer Network에서 발행하는 모든 소프트웨어, 프로그래밍 자료 또는 기사는 학습 및 연구 목적으로만 사용됩니다; 위 내용은 상업적 또는 불법적인 목적으로 사용되지 않으며, 그렇지 않으면 모든 책임이 사용자에게 부담됩니다. 이 사이트의 정보는 인터넷에서 가져온 것이며, 저작권 분쟁은 이 사이트와는 관련이 없습니다. 위 내용은 다운로드 후 24시간 이내에 컴퓨터에서 완전히 삭제해야 합니다. 프로그램이 마음에 드신다면, 진짜 소프트웨어를 지원하고, 등록을 구매하며, 더 나은 진짜 서비스를 받아주세요. 침해가 있을 경우 이메일로 연락해 주시기 바랍니다.

Mail To:help@itsvse.com