IDENT_CURRENT
을 사용하면 정확한 ID 값을 반환하지 않는다는 점을 알고 있습니다 (특히 멀티 스레드 응용 프로그램에서 특히 그렇음). 대신 SCOPE_IDENTITY()
을 사용하고 싶었습니다.제약 조건에서 SCOPE_IDENTITY() 사용
alter table Employee
add constraint Employee_D1 default ident_current('Employee') for SystemID
내가 대신 SCOPE_IDENTITY()
를 사용하여 수정해야 : 나는 아래의 문이
create table Employee
(
ID int identity(1,1),
Name varchar(20),
SystemID int,
constraint Employee_PK primary key (ID asc)
)
:
예를 들어이 내 Employee
테이블입니다.
alter table Employee
add constraint Employee_D1 default SCOPE_IDENITITY() for SystemID
이 오류를 포기하지 않았다. 그러나 행을 삽입 할 때이 열이 ID 값으로 업데이트되는 것을 보지 못했습니다. 내가 도대체 뭘 잘못하고있는 겁니까?
SystemID
은 읽기 전용이 아니어야하므로 계산 된 필드는 옵션이 아닙니다.
여기 내 연습은 병렬 프로세스가 행을 삽입하려고 시도 할 때 IDENTITY
값이 SystemID
에 잘못 입력 된 것을 제거하는 것입니다.
문제는 IDENT_CURRENT와이다 (내가 본 발명의 기분 아니에요, 가난한 필드 이름에 대한 사과)이 문제를 접근하는 것 방법 그렇지 않으면 세션에 대한 마지막 신원 값을 제공하므로 사용하는 것이 안전해야합니다. SCOPE_IDENTITY는 현재 세션에서만 작동하므로 가치가 없다고 생각합니다. 하지만 제약 조건에서 얻는 이점이 무엇인지 확신 할 수 없습니까? –
Allan과 동의 - 기본값이 'SCOPE_IDENTITY' 인 열을 가져야한다는 점은 무엇입니까 ?? 테이블에 고유 한 값이 필요한 경우 - 'INT IDENTITY' 유형의 컬럼을 사용하십시오. 그러나 동일한 값을 갖는 두 번째 컬럼을 갖는 이점은 무엇입니까? 이런 식으로해야한다면 - ON INSERT 트리거를 사용할 필요가 있습니다 .... –
'ID'는'IDENTITY' 열입니다 - 당신이'SystemID'를 확실히하려고합니까? 항상'ID'와 동일합니까? 또는 다른 테이블의 ID에? –