2013-05-14 26 views
1

我有一个产品,我当前正在创作,它依赖SQL Server作为后端。我试图解决的一个问题是改善'升级'的故事。所以v1将有一个特定的模式,并且v2可能包含对此模式的一些增强(新表格和新列)。以编程方式在SQL Server上查找并应用模式差异

我知道RedGate和ApexSQL的SDKs,但是很想避免。

我已经阅读了SMO文档,但是我对它很陌生,并且很努力地想知道这是否可以应用在这个situtaiton中。理想情况下,我希望能够制作这个程序(SMO或其他) - 基本案例看起来很直观,但如果我能帮到的话,我真的不想重新发明轮子。有没有人有任何类似的要求或想法我可以接近的经验?

回答

1

也许不正是您需要的信息(因为它不是SMO),但在看看实体框架代码优先迁移可能会帮助您:

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

变化的模型类可以可以直接应用到数据库,或者,如果您无法直接访问数据库,则可以为新版本生成SQL代码并将其交给数据库管理员。

+0

我正在使用EF Code First - 所以会检查CF Migrations - 感谢您的链接。 – 2013-05-14 13:37:51

2

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

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

+1

您正在描述的有趣的方法,我曾经有过触发器的经验,我对他们很好我知道我没有指定我使用EF,所以我不确定它是否会在我的工作案例 - 如果不是至少对类似案件有用。 – 2013-05-14 13:42:12

+0

这是一个有趣的一边。如果我冒险猜测,我怀疑EF会以与在SSMS GUI中进行更改时类似的方式生成DDL。虽然我不会打赌我的房子... :) – 2013-05-14 14:12:59

1

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

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

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

红门有模式比较产品太多,但我还没有真正使用它。

相关问题