【发布时间】:2014-04-24 04:30:24
【问题描述】:
我想将我的数据库从 v1.0 迁移到 v1.1,其中一项更改是更新了 Table1 中的一些值。我知道对于 INSERT,我可以很容易地包含一个删除我刚刚添加的值的回滚命令,但是表更改呢?有没有办法存储当前值并将此信息用于回滚过程(将来)?
谢谢。
【问题讨论】:
标签: sql-server rollback liquibase
我想将我的数据库从 v1.0 迁移到 v1.1,其中一项更改是更新了 Table1 中的一些值。我知道对于 INSERT,我可以很容易地包含一个删除我刚刚添加的值的回滚命令,但是表更改呢?有没有办法存储当前值并将此信息用于回滚过程(将来)?
谢谢。
【问题讨论】:
标签: sql-server rollback liquibase
您可以在变更集中指定<rollback> 块 (docs) 来描述如何回滚更改。在您的回滚标记中,您可以使用原始 SQL 或 <createTable> 标记重新描述表在更改之前的样子。
您还可以在回滚标记中指定 changeSetId 和 changeSetAuthor 以指向将重新创建表的现有 changeSet。如果自创建对象以来没有其他更改,则此方法可能更容易,但如果自首次创建以来已修改对象的多个 changeSet 则无法正常工作。
【讨论】:
execute 命令管理数据库转储。
SQL Server 中的任何DDL 操作(ALTER TABLE 是其中之一)都是事务性的。
这意味着您可以打开一个事务,对数据库对象进行更改,并回滚该事务,就好像它从未发生过一样。
有一些例外,主要是涉及文件系统操作的操作(将文件添加到数据库等)。
【讨论】: