有不止一个文件系统
大多数版本控制工具在本地磁盘文件系统上运行。
大多数关系数据库系统的数据库对象确实存在于文件系统中,因为存在标识对象的文本名称,并且可以检索或至少使用该名称生成创建脚本。
但它不是本地磁盘文件系统,因此对于严格在本地磁盘文件系统上运行的 CVS 或 SVN 等工具来说,它们是不可见的。
为了将 SVN 应用于数据库对象,必须将它们复制到本地磁盘文件系统中,并且必须将本地磁盘文件系统的更改复制到数据库中。
不同的使用方式
与每个开发人员维护一个私有工作副本的源代码不同,开发人员倾向于在网络某处的服务器上的共享数据库上工作。虽然 Visual Studio 为数据库的按需安装项目本地副本提供直接支持,但开发人员已避开此功能,因为没有方便且可靠的方法来合并更改。
但是,一旦数据库结构的更改由 CVS 或 SVN 等复制合并版本控制系统管理,传播和合并将大部分是自动的(条冲突),不再有任何理由共享数据库。
排除 SCC 作为选项
Microsoft SQL Management Studio 支持任何实现 SCC 规范的版本控制。微软只列出了 VSS (blech),但谷歌显示了过多的选项。然而,SCC 完全是关于锁定 - 双 blech。
在文件系统之间复制
整个问题现在转移到文件系统之间的复制之一。CodePlex 包含 VS2005/SQL2005 的实现,但它不适用于 VS2008/SQL2008。
在这一点上,我认为“我应该如何解决这个问题”的基本问题已经得到了令人满意的解决,尽管我不确定如何奖励积分。
感谢所有相关人员的意见。
确实会出现一些具体的问题,主要与如何编写各种类型的模式对象有关。
- 如何按依赖顺序
提取
create
和脚本alter
- 桌子
- 看法
- 存储过程
- 功能
- 扳机
- 指数
- 外键
- 如何按依赖顺序提取表填充脚本
- 如何有效地检测模式的更改(在没有触发器的情况下,
sys.objects
将需要轮询;这最好快速且便宜)
检测变化
我注意到可以使用策略将操作绑定到模式中的更改。仍然存在依赖排序和如何编写表创建语句脚本的问题