0

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

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

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

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

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

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

到目前为止似乎令人困惑的事情:

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

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

4

1 回答 1

0

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

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

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

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

于 2013-11-12T18:52:59.313 回答