2009-09-21 4 views
0

Visual Studio 2008, SQL Server 2005를 사용하여 Windows 응용 프로그램을 개발 중입니다. 사용자 로그 정보를 유지해야합니다. 신분 확인 열이 있습니다. 잘 작동합니다. 하지만 이제 ID 열의 값은 172입니다. 다시 로그온하려고하면 오류가 발생합니다 :SQL Server 2005에서 ID 열의 최대 값 설정

기본 키 pk_userLogId 위반은 'dbo.UserLog'개체에 중복 값을 삽입 할 수 없습니다. 명세서가 종료되었습니다.

오류 대화 상자를 닫으면 응용 프로그램을 계속 사용할 수 있지만 사용자 로그가 유지 관리되지 않습니다.

이 오류 메시지가 표시되지 않도록하려면 어떻게해야합니까?

ID 열의 최대 값을 설정할 수있는 방법이 있습니까?

도와주세요! 미리 감사드립니다.

+1

당신은 테이블 정의를 제공 할 수 있습니까? 기본 열에서 사용하는 데이터 유형은 무엇입니까? IDENTITY를 사용 했습니까? –

+0

@Sheetal : ID 열의 최대 값을 설정하면 무슨 뜻인지 이해할 수 없습니다. ID 열은 삽입 할 때마다 새 값이 필요합니다. SQL Server를 실행 한 지 오래되었지만 null을 삽입하거나 insert 문에서 값을 벗어나면 값이 자동 증가합니다. 아마도 최근 SQL Server 사용 경험이있는 사람이 확인할 수 있습니다. –

+0

이 CREATE TABLE의 USERLOG ( UserLogId의 INT 신원 (1,1) 제약, 사용자 이름 NVARCHAR (50 차 키를 pk_UserLogId) null가 아닌, LogInTime 날짜 제약 dft_LogInTime 기본 GETDATE() ) 테이블 정의 입니다 - 로그 아웃 시간 추가 ALTER TABLE USERLOG ADD LogOutTime datetime – Sheetal

답변

0

편집 :이 로그 테이블 스키마에 대한 오해에 기반하기 때문에

내 초기 응답이 잘못되었습니다. Sheetal이 나중에이 스키마를 게시 한 것을 볼 때 (그리고 컬럼의 이름이 UserLoginID가 아닌 UserLoginID ...이라는 사실을 깨달았을 때)이 가설은 무효화됩니다. 로그 테이블 그러므로

,

CREATE TABLE USERLOG 
(UserLogId int identity (1,1) CONSTRAINT pk_UserLogId primary key, 
    UserName nvarchar(50) not null, 
    LogInTime datetime CONSTRAINT dft_LogInTime default getdate() 
) 
--ADDING LOGOUT TIME ALTER TABLE USERLOG ADD LogOutTime datetime 

더 많은 수수께끼 영업 질문 만들기 ...

어떻게 하나의 ID 열 PK 위반 상태를받을 수 있나요? (해당 테이블에 대한 INDENTITY_INSERT 설정과 PK 열에 대한 값이 포함 된 수동 편집/삽입이 아닌 경우 Sheetal이 이에 대한 의견을 밝힐 수 있습니다 ...)

Sheetal은 응용 프로그램의 논리를 조사해야합니다. , 사용자가 인증 된 후 로그인을 완료하는 코드 영역에서 UserLogId 열에 값이 지정된 쿼리 인스턴스를 찾습니다 (물론 WHERE 절 이외에 있음).

아직, 확실하지 않습니다. 왜 우리 모두 열심히 노력하고 있습니까?, 그리고 ... 확실히 자신의 수용 속도 ... ;-)

을 정보를 제공하여 영어의 발생 가능한 장애를 고려할 때, 심지어 자신의 질문을 프레임으로 Sheetal 자신의 최소한의 노력을 주어 - 다음은 잘못된 (가설에 기반 함) ----

UserLoginId이 로그 테이블의 기본 키로 선언 된 것 같습니다. 우리는 주어진 사용자에 대해 많은 로그 레코드를 가지기를 기대하기 때문에 이러한 테이블에는 이상한 선택입니다.

SQL 테이블에서 기본 키 제약 조건은 필수적으로 테이블에 기본 키 값이있는 레코드에 대한 INSERT 요청을 거부하도록 SQL에 지시합니다. (그리고 질문에 언급 된 것과 유사한 오류 조건을 반환하기 위해)

로그 테이블 스키마와 유스 케이스를 알지 못하도록 조언하기는 어렵지만, pk 제약 조건을 모두 제거하거나 다른 열을 사용할 수도 있습니다. "EventId"라는 자동 증가 형 열이 적합한 선택 일 수 있습니다. 당신은 로그 테이블에 같은 뭔가를 얻을 것 :

EventID (PK) DateTime    UserLoginId EventType  Details 
1    01/02/2008 06:15:01 172   LogIn   Stan 
2    01/02/2008 06:15:21 321   LogIn   Jeff 
3    01/02/2008 06:15:24 172   FileDownload Report7.pdf 
4    01/02/2008 06:15:54 172   FileDownload SalesTraining.pdf 
5    01/02/2008 06:17:21 321   LogOut   

등이 ...

+0

제대로 읽지 못했습니다. 정의에 UserLoginID가 아니라 UserLogID가 표시됩니다. – MartW

0

신원 열을 자동 증가로 설정 했습니까? 숫자 범위 문제와 같은 소리는 아닙니다. 오히려 새로운 UserLog 항목을 만들 때 명시 적으로 기본 키 값을 제공하는 것처럼 보입니다. 오류 메시지는 사용자가 추가하려는 동일한 기본 키 값을 사용하여 레코드가 UserLog 테이블 내에 이미 있다고 믿게합니다.

관련 문제