簡體   English   中英

刪除和添加列時糾正錯誤處理

[英]Correct error handling when dropping and adding columns

我有一個表,當前正在使用幾個名為DateFromDateTo的列。 我試圖用一個NewDate列替換它們,並使用DateFrom的值填充現有行。

我需要良好的錯誤/事務處理,因為如果更改失敗,我不希望在表中間進行操作,我想還原。

我已經嘗試了很多方法,但是無法使其正常工作。 感謝您提供任何幫助,因為我對此經驗還遠遠不夠。

我開始

BEGIN TRAN

ALTER TABLE TableName
ADD NewDate DATETIME

IF @@ERROR = 0 AND @@TRANCOUNT = 1
UPDATE TableName
SET NewDate = ValidFrom
....

由於NewDate不在表中的列,因此此操作立即失敗。 很好,因此我在其中添加了GO 這將其分為兩批,並且現在可以運行,只不過它使@@ERROR檢查變得毫無意義。 我也不能使用局部變量,因為那些局部變量也會在GO之后丟失。 理想情況下,我想使用TRY...CATCH來避免在每條語句后檢查錯誤,但是我不能使用GO ,因為它需要一批。

我沒有找到有關這種情況的文章(使用GO處理錯誤)。 所以問題是:添加和更新列(似乎需要在某個地方執行GO )時,是否有任何方法可以獲得我正在尋找的帶錯誤處理事務方法?

還是我將不得不分批完成該工作,而如果出現任何問題又無法回滾到原始表?

您為什么擔心在事務中創建新列? 只需創建列,然后填充它即可。 填充它時甚至不需要顯式tran。 如果失敗(極不可能),只需再次執行更新即可。

我將執行以下步驟

  1. 添加新列
  2. 更新新欄
  3. 檢查新列中的數據是否正確
  4. 刪除不再需要的舊列(刪除它們之前,您可能需要檢查這些列在何處使用,例如,它們是否在任何存儲過程,報表,前端應用程序代碼中使用)

另外,值得為您的問題添加更多上下文。 我假設您正在針對測試數據庫測試腳本,然后將其應用於產品數據庫。 prod數據庫很大嗎? 很忙? 關鍵任務? 是否按計划備份?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM