2

我们有一个带有大约 15-20 个数据库的 SQL Server 实例,我们在 RedGate 的帮助下检查了 TFS。我正在编写一个脚本,以便能够在这些脚本的帮助下复制实例(例如,开发人员可以在需要时运行本地实例)。我担心的是这些脚本之间的依赖关系。

在 TFS 中,RedGate.sql为每个数据库创建了这些文件夹,其中包含文件:

Functions
Security
Stored Procedures
Tables
Triggers
Types
Views

我用 Powershell 做了一个快速测试,只是循环这些文件夹来执行 sql,但我认为这可能并不总是有效。我可以遵循严格的顺序吗?还是有一些更简单的方法可以做到这一点?澄清一下,我希望能够从一个完全空的 SQL Server 实例开始,并根据 TFS 中的内容(没有数据,但没关系)得到一个完全配置的实例。使用 Powershell 不是必需的,因此如果以其他方式更简单,那是可取的。

4

4 回答 4

4

如果您已经在使用 RedGate,他们有大量关于如何将更改从源代码控制移动到数据库的文章。这是一个描述使用 sqcompare 命令行从 TFS 移动数据库代码的描述:

http://www.codeproject.com/Articles/168595/Continuous-Integration-for-Database-Development

如果您与任何空数据库进行比较,它将创建您正在寻找的脚本。

于 2012-05-12T13:47:14.603 回答
1

从脚本文件夹部署数据库的唯一可靠方法是使用 Red Gate SQL Compare。如果您使用 PowerShell 运行 .sql 文件,则可能不会以正确的顺序创建对象。即使您以有意义的顺序运行它们(函数,然后是表,然后是视图......),您仍然可能遇到依赖性问题。

SQL Compare 读取所有脚本并使用它们在内存中构建一个“虚拟”数据库,然后为它计算一个依赖矩阵,因此在创建部署脚本时,事情会以正确的顺序完成。这将防止 SQL Server 引发与依赖相关的错误。

于 2012-05-14T08:41:33.433 回答
0

如果您将 Visual Studio 与数据库选项一起使用,则它包含一个架构比较,允许您将 TFS 中的数据库项目中的内容与本地实例进行比较。它将为您创建一个脚本,以便在本地实例中创建这些对象。我还没有尝试过为一个完整的实例这样做。

您最多可能必须在本地实例中创建数据库,然后让 Visual Studio 看到表和其他对象不存在。

您也可以只对每个数据库进行最后一次备份,然后让开发人员将它们恢复到本地实例。但是,这可能因每个环境而异,具体取决于安全策略和数据库中的数据类型。

我倾向于只使用 PowerShell 为我构建脚本。当我在本地实例上重新运行脚本时,我可以更好地控制脚本输出的内容和 PS 只是我的偏好。SQL 社区中已经编写了一些很好的脚本,可以在这方面为您提供帮助。Jen McCown写了一篇博文,其中包含了她丈夫为此而写的所有帖子,就在这里

于 2012-05-12T13:16:50.713 回答
0

我在博客中介绍了如何使用 SQL 比较命令行从一组 .sql 文件构建数据库。

http://geekswithblogs.net/SQLDev/archive/2012/04/16/how-to-build-a-database-from-source-control.aspx

帖子更多是从设置持续集成的角度出发,但原理都是一样的。

于 2012-05-14T15:26:57.673 回答