FireBird Forum
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
파이어버드 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
IBPhoenix
FireBird Main site
볼랜드포럼 광고 모집

FireBird 팁&트릭
[1] KEY 충돌나지 않게 생성하기... (내용수정)
xius.net::이필호 [xius] 6065 읽음    2002-07-25 19:49
본 내용은 테스트결과 Sybase에서만 잘되고 Interbase에서는 적용되지 않습니다.
---------------------------------------------------------------------------

가끔 질문에 PK가 생성되는 질문이 오고 그 답변으로 Gen_ID 인가로 하는것이 심심치 않게 올라오는데요..

제가 프로젝트 하면서 무수히 그런 경우를 접하면서 노하우가 생긴것을 공유하려고 합니다.

사실 어떠한 문제도 SQL로 전부 해결할 수 있을 만큼 SQL이 강력합니다.

다만 잘 모르고 있었던것 뿐이죠..

사설이 긴데요..

문제는 Insert를 할때 KEY로 생성할 값을 알아야 그 다음 값을 설정하는것으로 생각들을 하셔서 그런건데요..
약간 다른 방향으로 눈을 돌리면

Insert할때 아예 그 최대값 다음값으로 설정해버리면 Insert문장에서 한방에 해결됩니다.

즉..

Table 내용이..

Table Name : tbl
column : aaa int, bbb char(3)
PK : aaa

라고 할때

insert문은 다음과 같습니다.

insert into tbl (aaa, bbb) value (1, '123')

그러면 KEY충돌나지 않게 Insert를 하려면.. 

max(aaa) 값을 가져오면 됩니다.

다음과 같이요

똑같은 문장을 Sybase형으로 바꾸면 다음과 같습니다.

insert into tbl (aaa, bbb) select max(aaa) + 1, 'bbb' from tbl

그렇습니다.
Sybase는 insert문장에 바로 select 문장을 붙여 쓸수 있습니다만..

이와 같이 활용하면 얼마든지 활용할 수 있습니다.

max()값 가져오는 sql 문장만 수정하면 얼마든지 수정할 수 있기 때문이죠..

도움이 되셨길 바랍니다.

+ -

관련 글 리스트
1 KEY 충돌나지 않게 생성하기... (내용수정) xius.net::이필호 6065 2002/07/25
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.