我们公司正在将 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 项目中,但必须有更好的方法。
- 如何在不丢失任何用户输入数据的情况下将更改发布到数据库副本?我的猜测是在发布表时创建。我可以处理静态数据,但我不确定如何处理用户输入的数据。
我对整件事的理解可能存在根本性的错误。这就是我在这里的原因...... :)