创建用于隔离开发的SQL数据库项目

介绍

与开发人员团队合作通常会带来挑战,并会导致管理开发数据库时感到沮丧。 有很多好的方法可以解决相互干扰代码的问题,但是我首选的解决方案已成为Visual Studio中的SQL Server数据库项目。

本文将向您展示如何获取一个现有的SQL数据库并从中创建一个数据库项目,其中包含种子数据,以便您单击一下按钮即可擦除和还原本地数据库。

  • 快速将现有数据库反向工程为数据库项目,数据和全部。
  • 数据库代码与版本控制系统中的任何其他代码一样,可以被合并和回滚。
  • 可以在每个开发人员的计算机上快速部署数据库,以减少团队成员之间的干扰。
  • 在基于迁移的解决方案中看到的更改顺序是无关紧要的,因此不再有两个或多个开发人员同时进行的迁移冲突。
  • 可以播种一致的数据,以便可以消除在开发过程中潜入的数据完整性错误,并可以使用它们为集成测试创建一致的数据集。
  • 您可以为每个环境创建手动部署过程,以便构建服务器运行所有更改脚本(包括数据运动脚本)–在下一篇文章中,我将向您展示如何。

  • 在项目开始时,数据库可能会经常更改,以至于使数据库项目保持最新状态的工作量很大,其价值不菲。 如果是这样,请等到问题解决后再从数据库中创建数据库项目。
  • 使用微服务体系结构,您可能为每个域都有一个数据库项目,如果它们彼此依赖,则可能会发现管理这些关系或依赖关系会很棘手。
  • 一些组织采用了适合数据库更改和管理的流程,该流程与允许开发人员控制数据库及其部署的模型不太吻合。

对于本文,您将看到如何使用Northwind数据库将现有数据库转换为数据库项目。

在Visual Studio中,将SQL Server添加到SQL Server Object Explorer,然后连接到目标数据库。 然后,右键单击数据库,然后选择“创建新项目”。

选择保存新项目的位置后,您可以将所有其他选项保留为默认值,然后单击向导以完成操作。

这将添加具有所有表,视图和存储过程的数据库项目,但不包括任何种子数据。

如果您使用的不是dbo架构,则将看到为每个架构创建的文件夹,并且相关联的表,视图等将嵌套在下方。

接下来,将一个名为PostDeploy的文件夹添加到数据库项目中,以存储数据加载脚本和post-deploy脚本。

数据库项目的好处之一是,您可以为本地开发目的快速发布一组测试数据。 我发现最好的方法是先将数据放入数据库中,然后从SQL Management Studio或Redgate之类的工具“ SQL Compare”中生成脚本。 我将在这里向您展示如何使用SQL Management Studio,因为它做得很好并且是免费的。

在SQL Management Studio中,右键单击数据库,然后选择“任务”,然后选择“生成脚本”。 从要编写脚本的对象中仅选择表,然后单击“下一步”。

更改设置以使用“每个对象一个文件”,然后选择您之前创建的PostDeploy文件夹。

接下来,单击“高级”按钮,并将“脚本使用数据库”设置为“ False”,将“脚本数据类型”设置为“仅数据”。

这会将每个表的数据导出到一个单独的文件中,并将它们保存在我们的post deploy文件夹中。 完成向导,然后返回Visual Studio,以便我们可以将这些文件添加到项目中。

在Visual Studio的解决方案资源管理器中,单击数据库项目名称,然后单击“显示所有文件”的工具栏按钮,以便可以在部署后的文件夹中查看文件。 选择所有这些文件,然后右键单击并选择“包含在项目中”以将它们添加到项目中。 然后,您可以关闭“显示所有文件”。

选中所有发布后文件,右键单击它们,然后选择“属性”,然后将“构建操作”的属性更改为“无”,这样它们就不会包含在发布过程中,这样项目就可以建立没有错误。

每个数据库项目只能有一个部署后脚本,因为发布过程会使用“ PostDeploy”构建操作来查找文件以完成数据库部署。 要将一个添加到该项目,请右键单击部署后文件夹,然后依次选择“添加”,“脚本”和“部署后脚本”。 您可以将其命名为任意名称,因此在本教程中将其命名为“ PostDeployment.sql”。

听起来很像,部署后脚本将在创建表,视图和存储过程之后运行。 它通常用于加载种子数据,但是您可以使用SQLCMD语法执行任何其他命令。

打开部署后脚本,然后通过单击窗口顶部的“ SQLCMD模式”工具栏按钮来启用SQLCMD模式。

接下来,添加命令以在我们导出到该文件夹​​的每个文件中运行数据加载脚本。 这些操作必须以正确的顺序执行,以避免违反外键,如果是自引用键,则需要先删除键,加载数据,然后重新添加键。 还要注意,在第44行,您将需要在订单明细表周围添加引号,因为命令语法不喜欢表名中的空格。

现在,数据库项目已准备好在本地部署,并将包含所有表和数据。 右键单击数据库项目名称,然后从菜单中选择“发布”。 将目标数据库连接设置为您的本地服务器和Northwind数据库,或选择其他数据库名称以暂时保留原始数据库。 在“高级”设置中,选中“始终重新创建数据库”,并将其他设置保留为默认设置。 每次删除并重新创建数据库以确保状态良好。

您也可以更改部署后脚本以合并脚本,而不必每次都检查重新创建数据库,这对您有大量种子数据或在发布到本地服务器以外的环境时会有所帮助。 我还没有找到可以自动生成合并脚本的工具,因此通常使用Excel和Notepad ++的组合将导出的插入语句更改为合并脚本。 在下一篇文章中,我将向您展示如何做到这一点。

返回“发布数据库”向导,单击“将配置文件另存为”按钮,将这些设置另存为“ local.publish.xml”,然后单击“发布”按钮。 如果有任何错误,请使用“查看结果”链接来调查问题; 日志记录功能相当强大,通常可以找到问题所在。 如果一切正常,您现在应该拥有Northwind数据库和本地发布的数据,以及一个发布文件,您可以随时双击以擦除并重新创建数据库!

摘要

在本文中,您了解了如何创建数据库项目,该项目将使您快速而一致地将数据库部署到本地环境。 希望这将帮助您解决团队成员相互干扰共享开发数据库上工作的问题。

在下一篇文章中,我将向您展示如何进行下一步以将该数据库项目包括在持续集成过程中,并将其部署到生产环境中的每个环境中,从而消除与数据库更新进行任何直接交互的需要。

翻译自: https://www.javacodegeeks.com/2016/12/creating-sql-database-project-isolated-development.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值