2010-12-02 5 views
2

데이터베이스를 "정리"하고 IDENTITY 열을 동기화해야합니다. 저장 프로 시저를 사용하여 데이터를 처리하고 하나의 테이블에서 다음 테이블로 미러링합니다 (클리닝 및 데이터 유형 수정 후). 미래의 어느 시점에서 이전 테이블을 잘라내어 새 테이블 만 사용하고 싶습니다. 제 질문은 IDENTITY 필드를 둘 다 사용하는 동안 동기화 상태를 유지하는 방법입니다. 이전 테이블이 제거되면 새 항목은 계속 자동 증가 및 재구성/IDENTITY 필드를 변경하기위한 변경이 필요하지 않습니다 옵션입니다. 이것이 가능합니까 아니면 이것에 대해 더 좋은 방법이 있습니까?동기화 된 IDENTITY 열이있는 SQL 다중 테이블

다른 생각은 두 테이블의 ID 열을 저장하기 위해 조회 테이블을 작성하는 것이 었으며 언제든지 새 테이블에 삽입되어 이전 ID와 새 ID를 가져 와서 조회 테이블에 삽입했습니다. 오래된 테이블이 방해가되면 어색해집니다.

답변

1
  1. 새 테이블의 ID를 비 ID 필드로 설정하십시오.
  2. 데이터 채우기 프로 시저를 수정하여 새 테이블의 비 식별 필드를 이전 테이블의 ID 값으로 채 웁니다.
  3. 컷 오버시 새 필드를 자동 증가로 전환하고 그에 따라 set the seed number을 전환하십시오.
+0

ID가 아닌 필드를 ID로 변경하면 테이블을 다시 작성해야합니까? – jon3laze

+0

어떤 SQL 서버를 사용합니까? MS SQL의 경우, 아니오. 관련 MSDN 문서에 위의 링크 추가 –

+0

예 MSSQL. 기사를 가져 주셔서 감사합니다. – jon3laze

3

거기에 있었으므로. 새 테이블에 이전 ID를 FK로 넣으십시오. 이전 열을 삭제하기 직전에 해당 열을 삭제하십시오.

+0

이 아이디어 (+1)가 마음에 듭니다. 따라서 새로운 테이블을 사용하기 전에 유형을 ID 필드로 변경하십시오. –

+0

+1 나는이 아이디어가 마음에 들지만, 오래된 테이블에없는 새로운 테이블에 레코드가 추가되었다는 것을 잊었다. 내 해결 방법은 새 테이블의 ID 필드를 비 ID 필드로 변경하고 이전 테이블에 트리거를 넣어 새 데이터를 채 웁니다. 그런 다음 컷 오버하면 나는 정체성으로 바뀔 것입니다. – jon3laze

+0

아니요, 아니요. 새 테이블은 자체 ID 필드를 가져옵니다. 이전 테이블이나 새 레코드는 새 테이블에 삽입 될 때 새 ID를받습니다. new_table.old_id의 기본값은 null이지만 이전 테이블의 레코드를 복사 할 때는 old_id에 old_table의 값 인 id를 지정합니다. insert new_table (c1, c2, old_id) old_table에서 c1, c2, id를 선택합니다. – tpdi