2017-03-09 53 views
0

在構建期間,我們根據SSDT .sql項目生成我們數據庫的dacpac文件。這個dacpac稍後將使用sqlpackage部署到生產環境。 儘管使用/ p:DropStatisticsNotInSource = False開關,sqlpackage將刪除所有統計信息,這些統計信息是在生產數據庫的sqlproject的上次同步之後添加的。SSDT/SqlPackage丟棄統計信息

我們也可以重現此使用發佈配置和生成SSDT的腳本選項:

<?xml version="1.0" encoding="utf-8"?> 
<Project ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> 
    <PropertyGroup> 
    <IncludeCompositeObjects>True</IncludeCompositeObjects> 
    <TargetDatabaseName>hotel</TargetDatabaseName> 
    <DeployScriptFileName>Database.sql</DeployScriptFileName> 
    <TargetConnectionString>connectionstring</TargetConnectionString> 
    <BlockOnPossibleDataLoss>False</BlockOnPossibleDataLoss> 
    <DropObjectsNotInSource>True</DropObjectsNotInSource> 
    <DoNotDropDatabaseRoles>True</DoNotDropDatabaseRoles> 
    <DoNotDropDatabaseScopedCredentials>True</DoNotDropDatabaseScopedCredentials> 
    <DoNotDropUsers>True</DoNotDropUsers> 
    <DoNotDropServerRoles>True</DoNotDropServerRoles> 
    <DoNotDropSecurityPolicies>True</DoNotDropSecurityPolicies> 
    <DoNotDropSearchPropertyLists>True</DoNotDropSearchPropertyLists>  
    <DoNotDropPermissions>True</DoNotDropPermissions> 
    <DoNotDropPartitionSchemes>True</DoNotDropPartitionSchemes> 
    <DoNotDropPartitionFunctions>True</DoNotDropPartitionFunctions> 
    <DoNotDropExternalFileFormats>True</DoNotDropExternalFileFormats> 
    <DoNotDropExternalTables>True</DoNotDropExternalTables> 
    <DoNotDropErrorMessages>True</DoNotDropErrorMessages> 
    <DoNotDropDefaults>False</DoNotDropDefaults> 
    <ProfileVersionNumber>1</ProfileVersionNumber> 
    <DropStatisticsNotInSource>False</DropStatisticsNotInSource> 
    <ScriptRefreshModule>False</ScriptRefreshModule> 
    </PropertyGroup> 
</Project> 

我們怎樣才能強迫sqlpackage不要掉落統計?

+0

實際驗證是檢查生成的腳本,而不是傳遞給它的參數。劇本是做什麼的? 'DropObjectsNotInSource'是否故意設置爲'True'? –

+1

您是否在部署服務器上運行最新版本的sqlpackage.exe(dacfx)? – ErikEJ

+0

@PanagiotisKanavos是的,我們實際上想要在我們的數據庫中刪除表格,列和存儲過程。 我正在運行安裝了最新SSDT的VS2015,並嘗試過VS2017。兩者都產生相同的遷移腳本(使用DROP STATISTICS xyz.abc) –

回答

2

問題是使用DropObjectsNotInSource=True,它會覆蓋DropStatisticsNotInSource=False選項。這是一個錯誤,或者在sqlpackage.exe文檔中未指定。

一種可能的解決方法是使用Ed的AgileSqlClub SSDT過濾器 Elliott如this blog中所述。在這種情況下,您需要使用AgileSqlClub.SqlPackageFilter.dll,並添加以下選項:

/p:AdditionalDeploymentContributors=AgileSqlClub.DeploymentFilterContributor /p:AdditionalDeploymentContributorArguments="SqlPackageFilter=IgnoreType(Statistics)"