以编程方式在SQL Server上查找和应用架构差异

时间:2013-05-14 09:20:38

标签: c# sql schema diff smo

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

我知道RedGate和ApexSQL的SDK - 但是我们想避免使用。

我已阅读了SMO文档,但我是新手,并且很难看出这是否适用于这个问题。理想情况下,我希望这样做这个程序(SMO或其他) - 基本情况似乎很直接,但我真的不想重新发明轮子,如果我能帮助它。有没有人对我如何接近有类似要求或想法的经验?

3 个答案:

答案 0 :(得分:2)

您没有说出您正在使用的SQL Server版本,但在(我认为)2005及更高版本中,存在数据库触发器的概念。这些工作就像他们的表级表兄弟一样,但可用于跟踪数据库中发生的任何类型的DDL更改。我们没有用它来实际生成DDL - 更多的是跟踪表格的格式何时发生变化。虽然你想要的东西应该是可能的,但我已经想到了。

触发器是划分开发人员的事情之一。有些人认为它们是自切片面包以来最好的东西,而其他人则热情地讨厌它们。也许是因为当数据发生变化时,这是你想到的最后一件事。

答案 1 :(得分:1)

可能不完全是您正在寻找的(因为它不是SMO)但是看看实体框架代码优先迁移可能会对您有所帮助:

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

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

答案 2 :(得分: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也有架构比较产品,但我还没有真正使用它。