【问题标题】:How to deploy SQL script to clients如何将 SQL 脚本部署到客户端
【发布时间】:2013-11-13 02:52:59
【问题描述】:

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

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

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

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

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

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

目前看来令人困惑的事情:

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

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

【问题讨论】:

  • 感谢@marc 纠正我的帖子。

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


【解决方案1】:

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

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

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

我在http://schottsql.blogspot.com/2013/10/all-ssdt-articles.html 上写了一篇关于这个的博客 (或 http://schottsql.blogspot.com/search/label/SSDT 如果效果不佳)。这将带您了解为什么您可能想要使用 SQL 项目、创建、维护它们以及将更改发布到现有数据库的一些基础知识。

【讨论】:

  • 您的博客文章实际上已被我收藏,以便在某个时候阅读。谢谢。
猜你喜欢
  • 2011-05-15
  • 2017-04-08
  • 1970-01-01
  • 2020-01-13
  • 1970-01-01
  • 2011-12-22
  • 2011-03-21
  • 2015-10-17
  • 1970-01-01
相关资源
最近更新 更多