2012-11-22 2 views
0

SQL Server 2005 데이터베이스에 다른 테이블에 대한 연결이 많은 테이블이 있습니다. 흔히 기본 테이블에 중복 항목이 생길 때마다 연결된 모든 테이블의 데이터를 이동 한 다음 중복 된 항목을 삭제하는 저장 프로 시저를 작성했습니다.외부 키를 사용하여 행을 병합하여 병합

문제는 프로젝트가 계속 커질수록 연결된 테이블의 양이 관리하기 어려워지고 개발자가 저장 프로 시저를 업데이트하는 것을 잊어 버리고 병합 프로 시저가 실패하는 것입니다.

TSQL에서 사용할 수있는 더 매끄러운 병합 기능이 있습니까? 나는 모든 테이블이 foreign keys과 연결되어 있기 때문에 업데이트/삽입해야 할 테이블을 테이블 연결을 읽는 것으로 계산할 수 있다고 생각하고 있습니다.

Main table 
------------------------ 
mainid (PK) | datacolumns... 

Sub table 1: 
------------------------ 
subid1 (PK) | mainid (FK) | datacolumns... 

Sub table 2: 
------------------------ 
subid2 (PK) | mainid (FK) | datacolumns... 

Sub table 3: 
------------------------ 
subid3 (PK) | datacolumns... 

Connection table between "Main table" and "Sub table 3": 
------------------------ 
mainid (FK) | subid3 (FK) 

지금 내가 또는 Sub table 1Connection table에 자식 항목이있을 수도 있고 없을 수도 있습니다 Main table에서 두 개의 행이 있습니다

테이블 구조는 다음과 같이 보입니다.

Sub table 1은 항상 새로운 mainid으로 업데이트해야합니다. Sub table 2Connection table에는 고유 한 키 제한 사항이 있으므로 항목이 아직없는 경우 새로운 mainid으로 업데이트해야합니다.

우리는 항목이 고유하게 만드는 것에 대해 각각 고유 한 제한을 가지고 있고 존재할 수없는 경우 데이터를 복사해서는 안되며 복사해서는 안되는 20 가지가 넘는 테이블 (성장 중)을 말하고 있기 때문에 이것은 지나치게 단순화되었습니다. 테이블에서 고유 키에 따라.

도움을 주셨습니다.

답변

0

올바르게 이해하면 ON DELETE CASCADE에 필요한 외래 키가 문제를 해결할 것입니다. 이렇게하면 "기본"테이블에서 항목을 삭제하면 FK를 통해 연결된 다른 테이블에서 항목이 삭제됩니다.

+0

감사합니다.하지만 데이터를 병합하고 삭제하지는 않습니다. – Jan

관련 문제