2017-12-23 2 views
1

내 asp.net 응용 프로그램에서 "transfer number"열이 포함 된 페이지 뱅크 전송이 있습니다. 이것은 자동으로 생성 된 열입니다. 이 값은 쿼리를 기반으로합니다.기본 키 열 자동 증가

IF (SELECT COUNT(1) FROM tableName) = 0 
    SELECT IDENT_CURRENT('tableName') 
ELSE 
    SELECT IDENT_CURRENT('tableName') + 1 

두 명의 사용자가 로그인하면이 페이지에 대해 동일한 전송 번호가 표시됩니다. 레코드를 삽입하기 전에 다른 사용자에게 다른 전송 번호를 표시하려면 어떻게합니까?

감사합니다.

답변

1

열을 ID로 설정하면 값이 자동으로 생성되고 삽입 후 변수 @@ identity에서 삽입 된 ID를 가져올 수 있습니다. 이

테이블 디자인

CREATE TABLE YourTable 
(
SeqNo INT IDENTITY(1,1) PRIMARY KEY, 
Col1 VARCHAR(50), 
Col2 INT, 
... 
) 

처럼 나는 ID 및 기본 키와 같은 열 SEQNO을 설정했습니다.

Identity (1,1)는 첫 번째 값이 1임을 의미하고 각 행에 대해 +1이 증가하는 식으로 나타납니다.

는 지금은

INSERT INTO YourTable(Col1,Col2) 
values('abc',1) 

select @@identity 

지금 삽입 한 후, 제 2 선택은 신원 필드의 값으로 나에게 값 1을 반환합니다 테이블에 기록되어 삽입 1.

내가 실행하는 경우 이 한 번 더, 나는 2를 얻을 것 등

당신은 대신 @@ IDENTITY에 (참여하는 경우 트리거에서) 시스템 정의 함수 SCOPE_IDENTITY()를 호출 할 수 있습니다

데이터베이스 자체에서 값을 생성하므로 충돌을 피할 수 있습니다.

+1

트리거가 포함될 경우 @@ IDENTITY 대신 SCOPE_IDENTITY()를 사용하는 것이 좋습니다. –

+0

@DanGuzman 답변에 귀하의 의견을 추가했습니다. 감사 :) –