我最近尝试了一下(SQL 2008 版本),我发现它们还不错。好吧,唯一的问题是向导不够智能,无法在不先擦除所有数据的情况下更新数据库结构。这就是为什么这些项目没有在实践中使用的原因吗?
实际上从未见过任何人使用它们或根本没有提及它们。除非您明确查找,否则在博客和论坛中也看不到任何内容。
他们怎么了?
我最近尝试了一下(SQL 2008 版本),我发现它们还不错。好吧,唯一的问题是向导不够智能,无法在不先擦除所有数据的情况下更新数据库结构。这就是为什么这些项目没有在实践中使用的原因吗?
实际上从未见过任何人使用它们或根本没有提及它们。除非您明确查找,否则在博客和论坛中也看不到任何内容。
他们怎么了?
我使用作为 Visual Studio 数据库版一部分的数据库项目。这是一个很棒的工具。基本上,您在创建脚本时定义整个架构,然后将其签入源代码管理。然后它内置了工具来生成不同的脚本,顺便说一下,这些脚本不会删除数据。
它还具有数据比较工具,因此您可以比较数据库之间的数据并生成脚本以使数据库相同。
最近的 GDR 版本添加了一些有趣的功能。这样听起来,如果您使用他们内置的部署方法,您可以生成一个部署包,当您运行它时,它将分析目标数据库并仅应用差异。
如果您有 Team Studio - Team Suite 或 Development 版本,那么您可以使用 Database Edition。
试一试,这是数据库开发的一次伟大变革
像 Glennular 一样,我们使用它们来控制我们的模式和 s'procs。
虽然我们有一个相当先进的版本控制结构(CI、自动部署到 dev、单击部署到 stage 和 prod);我们不包括该结构中的任何数据库项目。我们只是还不相信它。
更新:(在太空中)
我们针对公司的职能领域(销售、营销等)有单独的 TFS 项目。在每个 TFS 项目中,我们都有一个 Main 和 Production 文件夹。我们还有一个包含数据库项目的 TFS 项目和另一个包含通用程序集/Visual Studio 项目的 TFS 项目。
发布后,我们从 Main 分支到 Production。我们没有临时分支,因为我们行动太快而无法处理。对与错,我们的生产力部分是由我们每周发布的生产级别的数量来衡量的;错误修复、新功能等。
CI 设置在 Main 分支上,这样每次签入都会导致 Build 服务器部署到我们的 DEV 环境中。然后运行单元和 Web 测试,如果成功完成,构建质量会自动设置为“开发”。当有人将构建质量更改为“暂存”时,这会导致任何先前的“暂存”构建被设置为“拒绝”,并导致该构建被推送到我们的暂存服务器,同时更新配置文件以指向正确的服务器。(为此我使用了 TFS Deployer 和 PowerShell 脚本)。
QA 对我们的登台服务器进行测试。一旦他们满意,生产团队就会将构建质量更改为“生产”。这会导致构建被发送到生产区域,然后手动复制到正确的位置。完成后,生产会通知开发人员,然后开发人员将该版本分支到生产文件夹中。QA 也会收到通知,然后谁会进行一系列生产测试,以验证一切是否确实按预期工作。
我们设置了报告来向我们展示生产版本之间存在哪些更改,以便我们了解正在部署的每个签入。这可以防止出现未知数,例如数据库更改等或其他一些潜在的破坏代码。
此外,我们的 BA 正在通过 Team System Web Access 跟踪工作项目,并知道这些项目何时投入生产。
尽管我们的 DBA 使用的是 Database Edition (GDR),但他们对自动部署的控制水平并没有留下深刻的印象。我希望 Rosario 能够为产品线带来更好的部署控制;但在那之前,我们有 TFS Deployer 和 powershell。
我们使用它们。我们保留所有模式创建/更新脚本和存储过程。主要目的是我们可以将项目连接到 SourceSafe 或 SVN。
它是一种保持 SQL 脚本版本受控的简单方法。
尝试在 VS 中进行一些 SQL 测试有点古怪,但您可以找到解决方法。
更新
实际上,我们将它内置到我们的部署脚本、我们的部署工具中,通过数据库项目(标记文件夹除外)并运行所有脚本。我们刚刚构建了一个运行项目的快速工具。如果有人有其他解决方案来部署数据库项目,那将很有帮助。
我们使用数据库项目为我们的 SQL 脚本提供版本控制。我们也喜欢使用 Visual Studio 环境来编辑 SQL;对于我们的一些新开发人员来说,它比查询分析器更容易使用。
我在一些付费项目中使用过它们,我认为它是一个很棒的工具。也就是说,我已经看到了一些问题。
如果 db 项目文件夹中的 .dat 文件与数据库的临时实例不同步,架构比较将给出不准确的结果。不确定这是怎么发生的,如果事情看起来不对,请仔细查看架构比较并删除您的 .dat 文件(在关闭解决方案后)。
如果您有 20 多个数据库并且它们相互引用并使用循环引用......它会受到伤害。我还没有想出如何让它适应这种情况。GDR 2 似乎提供了一些希望。