[英]Correct error handling when dropping and adding columns
我有一個表,當前正在使用幾個名為DateFrom
和DateTo
的列。 我試圖用一個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。 如果失敗(極不可能),只需再次執行更新即可。
我將執行以下步驟
另外,值得為您的問題添加更多上下文。 我假設您正在針對測試數據庫測試腳本,然后將其應用於產品數據庫。 prod數據庫很大嗎? 很忙? 關鍵任務? 是否按計划備份?
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.