我有一張表,當前正在使用名爲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
)的錯誤處理方法?
或者我將不得不在幾批中解決它,如果出現任何問題,沒有能力回滾到我原來的表格?
在同一事務中執行DDL和DML是麻煩的捷徑。如果要恢復升級,請使用備份。 –
@RemusRusanu所以,把它分成兩部分。有道理,只是想知道我是否不知道一些有用的SQL魔術。 – Alex
整體效果與僅重命名'DateFrom'到'NewDate'並刪除'DateTo'有什麼不同? –