본 내용은 테스트결과 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 문장만 수정하면 얼마든지 수정할 수 있기 때문이죠..
도움이 되셨길 바랍니다.
|