2011-09-16 28 views
0

我想從EmpTable簡單刪除,然後插入EmpTable Select * xxEmpTablemmddyyy
但EmpTable被太多表引用。將備份表中的行恢復到另一個表中。

考慮以下業務流程:

  • 員工表,通過直通PK和FK許多表被引用。

  • 在Employee表上的任何更新(比如在員工更名)更新現有行的effective_end_date,然後創建一個新的行與新effective_start_date

  • 是被插入的信息/更新員工表來自多個源文件(FoxPro表,CSV文件等)

  • 所述源文件,然後加載到臨時表
  • 做一些驗證
  • 存儲過程spTransfer: - 備份前isting表(從EmpTable中選擇*到xxEmpTablemmddyyyy) - 更新/插入Employee表。

考慮這種情況。

  • 用戶加載的源文件,以臨時表,做了一些驗證的東西
  • 執行spTransfer
  • 用戶意識到,源文件是不正確的程序。

現在,我需要根據xxEmpTablemmddyyyy恢復EmpTable的狀態。

我想從EmpTable中簡單地刪除然後插入到EmpTable中選擇* xxEmpTablemmddyyy 但EmpTable被太多表引用。

任何建議,非常感謝。

感謝,
埃爾默

+0

如果因爲外鍵關係而無法從EmpTable中刪除,那麼這是否意味着不正確的數據也需要從其他表中刪除?也就是說,你不能僅僅從EmpTable中退出壞數據,而是從所有表中退出。 – Wil

回答

0

所以是要求能夠扭轉的刪除和插入?

保存行被刪除到存檔表,所以創建歸檔表,如果你有一個標識字段,你將不得不與IDENTITY_INSERT上插入

select * into MyEMpTable_Archived from MyEMpTable 
where 1=2; 

選擇要刪除的行並將它們插入進入存檔表。

刪除目標表中的行。

加載舞臺表中的新行。

如果您想扭轉操作,您還需要跟蹤新插入的行。因此,在負載之前記錄最大值,然後在負載之後再次記錄。

如果用戶在新數據加載後調用,則可以刪除新插入的行,並放回刪除的行。

這是很多工作。

確保你有很好的頻繁備份,投資於SQL虛擬恢復或其他一些工具,它們可以讓你只檢索一張你進入非生產環境的表,然後將所需的行傳回表中。

如果這種情況經常發生,也許你不應該從目標表中刪除,但有一個位域,並將它們標記爲不活動或刪除,以避免所有這些。

相關問題