从RedGate签入脚本重新创建数据库

时间:2012-05-12 10:06:27

标签: sql-server powershell redgate

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

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

Functions
Security
Stored Procedures
Tables
Triggers
Types
Views

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

4 个答案:

答案 0 :(得分:4)

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

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

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

答案 1 :(得分:1)

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

SQL Compare读取所有脚本并使用它们在内存中构建“虚拟”数据库,然后为它计算依赖关系矩阵,这样在创建部署脚本时,事情就按正确的顺序完成。这将阻止SQL Server抛出与依赖项相关的错误。

答案 2 :(得分:0)

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

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

您也可以只对每个数据库进行最后一次备份,然后让开发人员将它们恢复到本地实例。但是,根据安全策略以及数据库中的数据类型,每个环境可能会有所不同。

我倾向于使用PowerShell为我构建脚本。当我在本地实例上重新运行脚本时,我可以按照需要完成的顺序执行它,我可以更好地控制脚本的内容。可能需要花费更多时间,但我可以使用更好的脚本来工作用,和PS只是我的偏好。 SQL社区中已经编写了一些很好的脚本,可以帮助您解决这个问题。 Jen McCown做了一篇关于她丈夫为此做的所有帖子的博文,right here

答案 3 :(得分:0)

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

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

这篇文章更多的是从建立持续整合的角度来看,但原则是相同的。

相关问题