1

我有一个我目前正在创作的产品,它依赖于后端的 SQL 服务器。我试图解决的一个问题是改进“升级”故事。所以 v1 将有一个特定的模式,而 v2 可能包括对这个模式的一些增强(新表和新列)。

我知道来自 RedGate 和 ApexSQL 的 SDK——但我想避免。

我已经阅读了 SMO 文档,但我对它很陌生,并且正在努力看看这是否可以应用于这种情况。理想情况下,我想让这个程序化(SMO 或其他) - 基本案例看起来很简单,但如果我能提供帮助,我真的不想重新发明轮子。有没有人对我如何处理有类似要求或想法的经验?

4

3 回答 3

2

您没有说您使用的是什么版本的 SQL Server,但在(我认为)2005 年及以后,存在数据库触发器的概念。这些工作类似于它们的表级表亲,但可用于跟踪数据库上发生的任何类型的 DDL 更改。我们并没有使用它来实际生成 DDL——更多的是用来跟踪表格格式何时发生变化。尽管我认为您所追求的应该是可能的。

触发器是区分开发人员的因素之一。有些人认为它们是自切片面包以来最好的东西,而另一些人则非常讨厌它们。也许是因为当数据发生变化时,这些是你最不想想到的。

于 2013-05-14T12:15:05.547 回答
1

也许不完全是您正在寻找的东西(因为它不是 SMO),但看看 Entity Framework Code First Migrations 可能会对您有所帮助:

http://msdn.microsoft.com/en-us/data/jj591621

模型类中的更改可以进行版本控制,并且可以直接应用于数据库,或者,如果您无法直接访问数据库,则可以为新版本生成 SQL 代码并将其交给数据库管理员。

于 2013-05-14T11:38:54.023 回答
1

我使用 Visual Studio 中的数据库项目来管理模式的版本控制。在数据库项目中创建基线后,您可以在项目中进行更改,然后使用架构比较创建 SQL 脚本以在不同环境中应用更改。

我建议只做附加更改,但它会为破坏性更改生成更改脚本。如果您没有同步您的环境,我强烈建议您为每个环境生成一个新脚本。

这篇博文介绍了如何在 Visual Studio 2012 中创建一个:http: //candordeveloper.com/2013/01/08/creating-a-sql-server-database-project-in-visual-studio-2012/

Red Gate 也有一个模式比较产品,但我没有真正使用它。

于 2013-05-14T13:38:09.307 回答