Primary Key 중복으로 인한 에러 발생판단방법 에 대한 질문입니다.
try
Except
//에러처리
end;
// 에러메세지를 파싱해서 테이블의 정의된 Primary Key 에 대한 문자가 있는지 확인후 대체하면 되겠지만
더 깔끔한 뭔가를 찿다 질문드립니다.
메세지 자체로 Primary Key 위반인지 알수 있는 방법이 있을까요?
개발환경에서는 아무리 재현해도 안생기는 에러인데 필드 나가서 잊을만 하면 한번씩 툭 튀어나옵니다.
원인 찿을동안 꼼수로 해결 할려고 하는 얗은 생각을 해 봅니다.
Comment 5
-
자리비움
2014.11.27 12:14
에러번호 잡아서 처리하시면 됩니다.select * from sys.sysmessages where error = 2627 -
희망나라
2014.11.27 14:32
답변감사합니다.
2627의 1042 포맷을 사용하나 보내요(??). 하나 배웠습니다.
쿼리분석기에서는 2627코드를 뱉어내는데 개발툴(델파이) 에서는
Except 에서 2627 코드는 보여주지 않고 description 만 보여주네요.
개발툴과 또 시름해야 겠습니다.
-
자리비움
2014.11.27 15:14
사용하시는 sql서버 버전이 2005 이상이라면 SP 또는 ad-hoc쿼리에서도 try catch 기능이 가능합니다.구글에서 mssql try catch 로 검색해보시면, 만족할만한 결과(?)를 얻으실 수 있으실 겁니다.개발툴과 씨름은 참 힘들어요. -
희망나라
2014.11.27 19:46
답변감사드립니다.
Try Catch 을 개발환경 에서 사용할수가 있나요?
try
Query.Sql.Add('insert into 중복데이터')
Query. Execsql;
except
On E:exception do begin
// 에러처리
end;
end;
개발환경에서 보통 쿼리 컴포넌트를 사용해서 쿼리하는데 Try Catch을 어떻게 사용가능 한가요?
Help Me.
-
자리비움
2014.11.27 23:03
제가 답변을 잘못 달아서 의도가 잘못 전달되었네요.
죄송합니다.try
string query = '
BEGIN TRY
INSERT INTO 중복데이터
END TRY
BEGIN CATCH
IF ERROR_NUMBER() = 2627
BEGIN
-- 2627 에러인 경우 처리
END
END CATCH';Query.Sql.Add(query)
Query. Execsql;
except
On E:exception do begin
// 에러처리
end;
end;델파이를 몰라 좀 어설픈데 프로그램단의 try catch 가 아닙니다.
ad-hoc쿼리를 try catch 로 감싸고 해당 에러인 경우 개별 처리할 수 있습니다.
참고로, 모든 DB에러가 쿼리 내의 try catch 에 걸리지 않습니다.
http://msdn.microsoft.com/ko-kr/library/ms164086.aspx