如何将SQL脚本部署到客户端

时间:2013-11-12 16:21:27

标签: sql version-control tfs sql-server-2008-r2 sql-server-data-tools

我们公司正在调整TFS以进行源存储库和项目管理。我负责项目的数据库部分。我们正在使用SQL Server 2008 R2,Visual Studio 2012和TFS Online。我们有一个数据库供我们的几个应用程序使用。到目前为止,我是唯一一个处理此数据库的任何更改的人。随着公司的消费,我们将拥有多个开发团队。所以我打算将数据库和SSDT项目一起保存到TFS。

目前我正在维护我的数据库,如下所示:

  • 我有UDF,存储过程和配置的单独文件夹。
  • 在这些文件夹下,我有每个对象的子文件夹。例如,对于存储过程,我有每个存储过程的子文件夹,其中包含用于创建SP的SQL脚本。 config文件夹包含类似于SSDT的部署后脚本的任何脚本(例如,填充静态数据)。
  • SQL脚本包含删除过程并创建过程的代码。
  • 我有一个c#app将所有SQL文件连接成一个单独的SQL文件。我们称之为FINAL脚本。创建FINAL脚本时,我可以指定版本号,该版本号添加更新语句以更新数据库上的版本表。

FINAL脚本可供客户下载并在数据库上执行。因此,该脚本主要包含对SP,UDF和静态数据的任何添加/编辑。在大多数情况下,它不会触及任何现有数据(用户输入的数据)。

作为TFS和SSDT的新手,我不确定如何使用SSDT / TFS或者如果有更好的方法做类似的事情。到目前为止,我对SSDT和TFS的理解是:

  • 我可以将现有数据库导入SSDT项目。
  • 这将为包括表格在内的所有对象创建脚本。
  • 我可以轻松地将数据库发布到本地服务器或我有权访问的服务器。

到目前为止看起来令人困惑的事情:

  • 如何为客户提供最新的更新脚本?我想手动将FINAL脚本包含在SSDT项目中,但必须有更好的方法。
  • 如何在不丢失任何用户输入数据的情况下将更改发布到数据库副本?我的猜测是在发布表时创建。我可以处理静态数据,但我不知道如何处理用户输入的数据。

我对这件事的理解可能存在根本性的错误。这就是我在这里的原因...... :)

1 个答案:

答案 0 :(得分:0)

您希望将数据库拉入SQL项目。在那里保持所有的变化。这告诉您的系统数据库的架构应该是什么。从那里,我将生成dacpac文件(通过构建项目)并将其提供给您的客户,同时让他们安装包含SQLPackage的SSDT工具。他们可以运行SQLPackage来更改其数据库以自动处理架构更改。这将使他们的数据库与您的架构保持一致,无论它有多远。

我还要为他们创建一个发布配置文件供他们使用。这使您可以控制一些设置。

  • 您可以选择不删除项目中没有的任何对象
  • 您可以选择忽略用户/权限
  • 如果数据丢失,您可以设置一个不允许更改的选项。
  • 您可以在事务中包装所有内容,以便更新失败的回滚
  • 如果您为他们提供要运行的批处理文件,您可以指定输出文件或差异报告,或让他们生成自己的脚本来进行更新。

我在http://schottsql.blogspot.com/2013/10/all-ssdt-articles.html发表了关于此的博文 (或http://schottsql.blogspot.com/search/label/SSDT如果不能正常工作)。这将向您介绍为什么您可能希望使用SQL项目,创建它们,维护它们以及将更改发布到现有数据库的一些基础知识。

相关问题