将视图回滚到同一视图的先前版本

时间:2011-05-15 21:48:47

标签: sql-server deployment fluent-migrator

我正在使用FM来部署数据库。作为该部署的一部分,我正在推出一个视图。变化如下:

R1:创建视图

R2:无法更改视图

R3:在视图中添加一列

R4:没有变化

R5:从视图中删除列

视图由源代码管理中的脚本创建。让我们说我部署R3然后决定我应该回滚到R2(我想的是一个我不想留在奇怪状态的生产网站)。因此视图的脚本(drop / create)位于本地文件中。我不能再使用该脚本,因为本地版本在R3但我希望它返回R1(或R2)。

如何使用FluentMigrator 可靠地将视图回滚到以前的版本?我能想到的唯一选择是将视图创建脚本保存在我的Migration类的字符串中。但似乎我需要在课堂上将它的每个版本都放在一个字符串中 - 非常笨拙并且很难卖给团队。

我能想到的每一个现实解决方案都与源控制的想法背道而驰 - 在本地拥有单一版本的东西并跟踪其随时间的变化。

2 个答案:

答案 0 :(得分:1)

我将此功能添加到FluentMigrator中 - 能够直接从源执行脚本。你可以在这里得到它:

https://github.com/jcollum/fluentmigrator

目前仅支持SVN。还没有融入主要分支。

答案 1 :(得分:0)

一种非常简单的方法是执行以下操作:

if (object_id('dbo.myView', 'V')) is not null
   drop view [dbo].[myView]
go
create view [dbo].[myView] as

select foo, bar
from dbo.Orders

现在,如果您需要更改该视图,则可以对此脚本进行更改并进行部署。它会删除视图,如果它存在并创建它新鲜。从源代码管理的角度来看,您所做的只是对文本文件进行更改,以便您能够有效地存储它,非常简单地查看差异等。换句话说,您可以执行所有源代码控制的事情确实很好,因为它只是文本。