2011-09-16 4 views
0

EmpTable에서 간단한 삭제를하고 EmpTable에 삽입하십시오. Select * xxEmpTablemmddyyy
그러나 EmpTable이 너무 많은 테이블에 의해 참조되고 있습니다. PK와 FK 통해 많은 테이블에 의해 참조,백업 테이블의 행을 다른 테이블로 복원하십시오.

  • 직원 테이블 :

    는 다음과 같은 비즈니스 흐름을 고려하십시오.

  • 직원 테이블에 대한 모든 업데이트 (예를 들어 직원 이름의 변화)이 기존 행의 effective_end_date을 업데이트하고 새로운 effective_start_date에 새 행 삽입됩니다

  • 정보를 생성/직원 테이블에 업데이트 된 많은 소스에서 온다 파일 (FoxPro에 테이블, CSV 파일 등)

  • 소스 파일은 다음 준비 테이블에로드되는 것을
  • 몇 가지 검증
  • 저장 프로 시저 spTransfer 수행 - 백업 전을 테이블 선택 (EmpTable에서 *를 xxEmpTablemmddyyyy로 선택) - 직원 테이블로 업데이트/삽입.

시나리오를 고려하십시오.

  • 사용자가 준비 테이블에 소스 파일을로드, 일부 검증 물건
  • 했다 spTransfer
  • 사용자가 소스 파일이 잘못된 것을 깨달았다 절차를 실행합니다.

이제 xxEmpTablemmddyyyy를 기반으로 EmpTable의 상태를 복원해야합니다.

EmpTable에서 간단한 삭제를 한 다음 EmpTable Select * xxEmpTablemmddyyy에 삽입하고 싶습니다. 그러나 EmpTable이 너무 많은 테이블에 의해 참조되고 있습니다.

모든 제안은 높이 평가됩니다.

감사합니다,
엘머

+0

외래 키 관계로 인해 EmpTable에서 삭제할 수 없다면 잘못된 데이터를 다른 테이블에서도 제거해야한다는 의미가 아닙니까? 즉, EmpTable의 모든 데이터를 삭제할 수는 없습니다. – Wil

답변

0

SO 요구 사항은 삭제를 반대하고 삽입 할 수 있나요?

는 정체성 필드가 경우 행이 삭제 될 선택을 삽입

select * into MyEMpTable_Archived from MyEMpTable 
where 1=2; 

에 IDENTITY_INSERT에 삽입해야합니다, 아카이브 테이블 행이 보관 된 테이블에 삭제되는 저장, 그래서 만들 아카이브 테이블에 저장하십시오.

대상 테이블에서 행을 삭제하십시오.

스테이지 테이블에서 새 행을로드하십시오.

작업을 되돌리려면 새로 삽입 된 행을 추적해야합니다. 따라서로드 전과로드 후 최대 값을 기록하십시오.

새 데이터가로드 된 후 사용자가 호출하는 경우 새로 삽입 된 행을 삭제하고 삭제 된 행을 되돌릴 수 있습니다.

이것은 많은 작업입니다.

빈번한 백업이 있는지 확인하고 SQL 가상 복원 또는 이후의 한 테이블 만 검색하여 비 프로덕션 환경으로 가져간 다음 원하는 행을 다시 테이블로 전송할 수있는 다른 도구에 투자하십시오 .

이런 일이 자주 발생하는 경우 대상 테이블에서 삭제하지 말고 비트 필드가 있으면 비활성 또는 삭제됨으로 표시하여 모든 것을 피할 수 있습니다.

관련 문제