是否可以从数据库更新 SSDT DB 项目?

Is it possible to update a SSDT DB project from a database?

我们有两个软件项目都与一个数据库通信。现在 SQL 更新都在数据库上完成,它依赖于开发人员确保独立更新两组项目以使用最新的数据库模型。更糟糕的是,这两个项目都位于单独的源代码控制存储库中的单独解决方案中。

虽然我承认这是一个糟糕的情况,但我继承了这种情况,虽然我的长期目标是在两个集合共享的一个共同项目中整合和共享它们之间的(大量)重复逻辑由于各种原因,由于关键的最后期限即将到来,并且需要迭代地组合它们并与其他开发人员安排它,以免过多地干扰工作,所以现在立即进入该应用程序是不可行的。

牢记这一点,我真的很想使用 SSDT 至少开始将数据库结构置于源代码控制之下,并使其更易于管理,因为我将要做很多数据库更改。

在这种情况下 SSDT 的问题是您只能从数据库导入 一次。之后该选项变灰且不可用,这显然是 SSDT 的设计决定,因为它在 MSDN 文档中明确列出。

是否有任何简单的方法来更新我的 SSDT 项目,而无需在每次有人更改数据库结构时更新当前项目并重新创建它?

首先你的权利,这是一个可怕的情况,所以从长远来看,努力改善它!

您可以做两件事,首先您可以使用 SSMS "Generate Scripts" 导出所有对象,然后使用 SSDT 中的导入从脚本导入 - 这不是灰色的。

您可以做的第二件事是在 SSDT 中使用模式比较手动引入更改,您可以将数据库设置为源,将项目设置为目标,然后选择要删除、更新和导入的内容。

埃德

我要比较解决方案:
选择模式比较,将您的数据库作为源,将数据库项目作为目标,然后进行比较和更新

see the this answer

它的回答有点延迟。我正在使用 VS2017 数据库项目,其中我通过将本地数据库与数据库项目进行比较来完成此任务,比较结束后您可以通过更新按钮

更新数据库

第 1 步右键单击数据库项目并单击模式比较项。

步骤 2 select 目标 -> select 数据库连接选项

第 3 步更改源和目​​标

查看屏幕截图了解更多详情

创建一个新的临时数据库项目(在 TFS 之外)并导入所有对象。 签出数据库项目(在 TFS 内)并将新临时数据库项目中的所有文件夹(不包括 BIN、OBJ 文件夹)复制并粘贴到数据库项目(在 TFS 中)并签入。这是将最新的 DB 对象放入其中的方式TFS 没有复制。 如果您希望 copy/paste 操作中有新文件,则新文件应包含在数据库项目中。 删除临时数据库项目文件夹。 每当您想将所有数据库对象更新到 TFS 时,您都需要执行该过程。

这是一个解决此文件复制问题的解决方法。