我有一个表,它当前正在使用几个名为DateFrom
and的列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
。理想情况下,我想使用 aTRY...CATCH
来避免在每个语句之后检查错误,但我不能使用 a GO
,因为它需要是一批。
我发现的所有文章都没有谈论这种情况(使用 进行错误处理GO
)。所以问题是:在添加和更新列时(这似乎需要某个地方),有什么方法可以得到我正在寻找的带有错误的事务处理方法GO
?
还是我将不得不分批进行,如果出现任何问题,我无法回滚到我原来的表?