VS2010数据库项目部署重建每张表

Posted

技术标签:

【中文标题】VS2010数据库项目部署重建每张表【英文标题】:VS2010 database project deploy rebuilds every table 【发布时间】:2014-08-12 03:19:50 【问题描述】:

我最近在 VS2010 中为现有的 SQL Server 2008 R2 DB 创建了一个数据库项目。我通过在末尾添加 3 个新列更新了 11 个表中的 1 个。然后我更新了 4 个引用该表的视图。

然后我尝试了构建/部署,它只生成一个脚本。

我已经检查了脚本,对于数据库中的每个表,它都生成了代码,这些代码将创建每个表的临时版本,从现有表中复制数据,删除原始数据并重命名副本。

我在这里看到了帖子,它坚持为删除的列重建表,我尝试设置 IgnoreColumnOrder 但没有任何区别。无论如何,这似乎与我的情况无关,所以我并不感到惊讶。

我创建了我的数据库项目,让 DBA 为我提供了一个完整的生产脚本版本,在我的 PC 版本的 SQL Server 上构建了该数据库,然后从中创建了我的初始项目。我认为这不会有任何区别,我已经将表的项目定义与目标 Dev DB 进行了比较,它们是相同的。

我没有勾选“始终重新创建数据库”,并勾选了“如果可能发生数据丢失,阻止增量部署”。不要以为他们与我的问题有任何关系?

有什么想法吗?

【问题讨论】:

您是否尝试过进行架构比较?您可能有排序规则差异或其他导致重建的细微差异。这也可以向您显示有关实际不同之处的更多详细信息。您也可以考虑尝试一个 SSDT 项目(在概念上与 VS2010 DB 项目非常相似),看看是否有任何不同。 感谢您的建议。不幸的是,昨晚我决定作为一种解决方法来保存数据,允许重新创建数据库,然后重新加载数据,这样我就再也找不到原因了。我确实尝试过将架构与 Systest 环境进行比较,但在大多数表上都显示“跳过”,所以无论问题是什么,我都无法找到答案。您的建议是对未来有用的提示。我不认为我可以安装 SSDT。它们不是 SQL Server 2012 附带的吗?我的机器非常关闭,我无法安装已批准软件列表之外的任何内容。 您可能想与尝试 SSDT 的大咖交流。在大多数情况下,我发现它的功能比 VS DB 项目好很多。我认为它可以用完 VS2010 shell,尽管有使用 VS2012 和 VS2013 shell 的选项。可以在这里看到更多:blogs.msdn.com/b/ssdt 【参考方案1】:

我找到了数据库的备份,并按照 Peter 的建议运行了 Schema Compare。不同之处在于目标数据库对大多数表进行了 PAGE 压缩,但项目定义中没有。

【讨论】:

很高兴您发现了这个问题。这些是最容易错过的一些事情。

以上是关于VS2010数据库项目部署重建每张表的主要内容,如果未能解决你的问题,请参考以下文章

让 MSBuild 和 CruiseControl .NET 构建和部署 VS2010 数据库项目

在 vs2010 中使用 Database 项目部署和应用发布补丁

VS2010 数据库项目部署——“SqlDeployTask”任务意外失败,NullReferenceException

VS2010 数据库项目部署,如果可能发生数据丢失会失败吗?

使用VS2010的Database 项目模板统一管理数据库对象

在 VS2010 数据库项目中部署时设置 DefaultDataPath 和 DefaultLogPath