【问题标题】:Database Project copy table while deploying部署时数据库项目复制表
【发布时间】:2016-10-26 17:51:59
【问题描述】:

Visual Studio 2013

SQL Server 2008

目标框架:.Net 3.5

我创建了一个 SQL Server 数据库项目,它运行良好。但是我添加了一个分区函数和分区架构 [PS],并更改了我的一张表:删除聚集主键并在新 PS 上添加聚集索引:

CREATE CLUSTERED INDEX [Ind_Archive_Data]
ON [Archive].[Data]([Id] ASC, [CreatedOn] ASC)
ON [RangePS] ([CreatedOn])

之后,每次我重新部署项目时,都会创建表 [Archive].[Data] 的副本:

CREATE TABLE [Archive].[tmp_ms_xx_Data]....
INSERT INTO [Archive].[tmp_ms_xx_Data]...copy data...
DROP TABLE [Archive].[Data];
EXECUTE sp_rename N'[Archive].[tmp_ms_xx_Data]', N'Data';

即使我不对这张表做任何改动。更糟糕的是 - 它在一次部署期间复制了两次:第一次如上所示,第二次 - 以相同的方式重新创建表并创建索引 [Ind_Archive_Data] 的副本。

这很糟糕,因为我的数据表可能非常大。 我运行 Shema 比较:数据库有更多对象,但我尝试部署的表 - 完全相同。

请有人解释一下这种行为以及我该如何解决它。

【问题讨论】:

  • 不确定,它是否对某人有用。但以防万一。

标签: .net sql-server sql-server-2008 visual-studio-2013


【解决方案1】:

我从 dacpac 文件生成部署脚本的方式如下所示:

sqlpackage.exe /Action:script /sourcefile:J:\path\to\My.dacpac /targetservername:localhost /targetdatabasename:ArchiveDB /v:Environment=DEV /v:Revision=1.1.0.0 /OutputPath:J:\test\ResultingScript.sql /v:ServiceUser=domain\user /v:ApiUser=domain\user /v:CsapiUser=domain\user /p:BlockOnPossibleDataLoss=True /p:IgnorePartitionSchemes=false

问题出在最后一个参数上。默认情况下,出于某种原因,它不仅是真的,而且总是会检测到我的架构中的一些差异。

有关此参数的更多信息,您可以查看:

  1. https://msdn.microsoft.com/en-us/library/hh550080(v=vs.103).aspx

  2. https://social.msdn.microsoft.com/Forums/sqlserver/en-US/01a9fbae-c143-45b1-bbdd-e1a1cddba042/sqlpackage-rebuild-the-table?forum=ssdt

【讨论】:

    猜你喜欢
    • 2012-02-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多