繁体   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