@Phil : 테이블에 자동 증가 PK 열과 AdminName 열이라는 두 개의 열이 있다는 뜻이 아닙니까? AdminName이가는 열이 하나만있는 경우 AdminName은 PK이며 물론 문자열을 자동 증가시킬 수 없습니다. 비즈니스 규칙에서 정규화 된 Windows 사용자 이름을 기본 키로 설정해야합니까? AdminName 열에 대한 대체 고유 인덱스가 필요하지 않기 때문에 실행 가능하고 의미가 있습니다.
그러나 테이블에 하나가 아닌 두 개의 열이있는 경우 :
SQLServer에서 자동 증가는 테이블 / 열 정의의 일부입니다. 열을 정수로 정의한 다음 증분 (일반적으로 1)을 지정하여 ID 열로 만들 수도 있지만 2, 5 또는 10 등이 될 수 있습니다. 행을 삽입하려면 다른 열 값을 삽입하고 PK 열에는 아무 작업도하지 않습니다.
insert into T
(foo)
values('bar')
삽입을 수행하는 저장된 프로시 저는 SCOPE_IDENTITY를 RETURN 값으로 만들거나 SCOPE_IDENTITY를 OUT 매개 변수로 클라이언트에 다시 전달할 수 있습니다.
PS SCOPE_IDENTITY ()는 현재 범위에서 가장 최근에 생성 된 자동 증가 ID 값을 반환합니다. 다음 ID 값을 생성하지 않습니다.
편집하다:
아마도 관리자 테이블에는 관리자 집합이 포함되어 있습니다. 그러나 정수 기본 키 열 외에 다른 열이없는 경우 관리자를 식별 할 방법이 없습니다. 당신이 할 수있는 유일한 일은 그것들을 서로 구별하는 것입니다. 그것은 당신을 전혀 멀리하지 않습니다. 그러나 관리자 테이블에 다음 구조 중 하나가있는 경우 :
ID INTEGER PRIMARY KEY AUTOINCREMENT
windowsusername varchar(50) (unique index)
또는
windowsusername varchar(50) primary key
다른 테이블에서 관리자 테이블을 참조 할 수 있으며 외래 키는 의미가 있습니다. 이것이 바로 단일 정수 열로 구성된 테이블에없는 의미입니다.
두 개의 열이 있으면 저장 프로 시저가 다음을 수행하도록 할 수 있습니다.
insert into Administrators
(windowsusername)
values('mydomain\someusername');
return SCOPE_IDENTITY();
클라이언트 프로그램은 자동 생성되고 새로 삽입 된 행에 할당 된 자동 증가 ID를 반환 값으로 반환합니다. 이 접근 방식은 일반적인 관행이며 "모범 사례"로 간주됩니다.
추신 : "삽입 할 것이없는 경우" "값을 삽입"하는 방법을 몰랐다고 말씀하셨습니다. 거기에 모순이 있습니다. 삽입 할 것이 없는데 왜 삽입합니까? 고객에 대해 전혀 모르는데 왜 새로운 CUSTOMER 레코드를 생성하겠습니까? 이름도, 도시도, 전화 번호도 아니 고요?