gpt4 book ai didi

sql-server - 删除和添加列时纠正错误处理

转载 作者:行者123 更新时间:2023-12-03 08:59:10 25 4
gpt4 key购买 nike

我有一个表,当前正在使用几个名为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。如果失败(极不可能),只需再次执行更新即可。

我将执行以下步骤

  • 添加新列
  • 更新新列
  • 检查新列中的数据看起来是否正确
  • 删除不再需要的旧列(您可能希望在删除它们之前检查它们在何处使用,例如,它们是否在任何存储过程,报告,前端应用程序代码中使用)

  • 另外,值得为您的问题添加更多上下文。我假设您正在针对测试数据库测试脚本,然后将其应用于产品数据库。 prod数据库很大吗?很忙?关键任务?是否按计划备份?

    关于sql-server - 删除和添加列时纠正错误处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12916307/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com