我们使用 Red Gate 生成用于部署的脚本并控制版本控制。
“部署”和“版本控制”是 SQL 代码的不同问题。
需要注意的重要一点:您的生产数据库是所有数据的主数据库。因此,将定期副本安排到测试服务器并将其用作基线。NUnit 每天晚上生成的带有基本数据的数据库(看到了,笑了)通常没用。如果您有十亿行并且需要针对它测试查询怎么办?
版本控制:您可以使用 Red Gate 工具生成模式作为基线,然后将其与此副本(或您的 QA 或其他)进行比较。Red Gate 工具允许与文件夹进行比较,在我们的案例中,该文件夹受 SVN 控制,并且每次发布都会更新。所以我们有每个对象的完整历史
部署:我们将我们的开发脚本(也在 SVN 中)应用于一个干净的“构建”数据库,并与另一个干净的数据库进行比较。这成为我们的部署脚本。
这当然是相当简化的。
专业版提供了一个用于同步和比较的 API,因此您可以在需要时集成到您的工具链中。不需要图形用户界面。顺便说一句,我们使用它来提供一些带有客户端代码的特殊用户沙箱的一键同步。
正如 Remus 提到的,它们对于某些操作并非万无一失。如果您要更改 1.5TB 表上的内容,我会很乐意手动编写我的脚本。另一个令人恼火的是,Red Gate 的工具习惯于将 SCHEMABINDING 放在相关视图或 udf 上,以便简单地检查约束更改。
我还推荐阅读 Martin Fowler 的“进化数据库设计”以获得一些灵感