2012-03-09 2 views
1

데이터베이스에는 많은 테이블이 있습니다 (물론). 우리 데이터베이스에는 하나의 테이블이 있습니다. 이 테이블에는 사람, 연락처 등과 같은 각 테이블과 관련된 모든 파일 목록이 있습니다. 부모 레코드 키를 저장하는 파일 테이블에 하나의 열 (부모 레코드)이 있습니다. 열은 여러 테이블에 대한 관계를 가짐). 이제 우리는 사람들로부터 행을 삭제 한 것을 볼 수있는 한 곳에서 데이터베이스 수준으로 무언가를 만들고 싶습니다. 그래서 연락처에서 모든 행을 삭제하십시오.SQL Server 2005의 테이블에서 행을 삭제할 때 대응 방법

  1. 각 테이블에 트리거를 만드는 한 가지 방법이지만 수백 개의 테이블이 있습니다.
  2. 관계가 외래 키가 아니기 때문에 캐스케이드 삭제를 사용할 수 없습니다.

기존 데이터가 있으므로 테이블 구조를 변경할 수 없습니다. '태평양 표준시'에 의해 제안

덕분에

+1

관계 없음 = :(내가 아는) 다른 데이터베이스 수준 옵션은 트리거입니다. 대량의 트리거 코드가 동일한 경우 (예 : 테이블 만 변경되는 경우) 자동으로 생성 될 수 있습니다. 또 다른 옵션은 주기적으로 실행되어 특정 유지 관리 작업 (예 : 고아 레코드 삭제)을 수행하는 '정리 작업'을 실행하는 것입니다. 피드백에 대한 –

+0

감사합니다. – daljit

답변

0

접근 본질적으로 쓰레기 수거 방식이며, 트리거의 사용을 통해 선호 될 수 있습니다. 시스템의 전반적인 특성을 알지 못하는 경우, 응답 성이 더 중요 할 경우,이 접근법은 주어진 레코드를 삭제할 시간을 추가하지 않습니다. 다시 말하면, 참조되지 않은 리소스를 가질 위험은 삭제 단계를 늦추는 위험보다 적습니다.

이 샘플 코드는 ID가있는 테이블을 반복하고 중앙 집중식 '리소스'테이블에서 해당 테이블의 모든 고아를 삭제합니다.

가정 :

  • 부모 테이블의 각 ID 열이
  • 자원 테이블 '파일'을 식별 어떻게 든이 샘플은 'TABLENAME'을 열이 (부모가 발견 될 수있는 테이블

( http://gallery.technet.microsoft.com/scriptcenter/Garbage-Collection-of-a-99594c13

) Microsft 스크립트 센터에 게시 됨) 예를 들어 하드 코딩