部署

时间:2016-10-26 17:51:59

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

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 Compare:数据库有更多的对象,但我尝试部署的表 - 完全相同。

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

1 个答案:

答案 0 :(得分:0)

我从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