在構建期間,我們根據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不要掉落統計?
實際驗證是檢查生成的腳本,而不是傳遞給它的參數。劇本是做什麼的? 'DropObjectsNotInSource'是否故意設置爲'True'? –
您是否在部署服務器上運行最新版本的sqlpackage.exe(dacfx)? – ErikEJ
@PanagiotisKanavos是的,我們實際上想要在我們的數據庫中刪除表格,列和存儲過程。 我正在運行安裝了最新SSDT的VS2015,並嘗試過VS2017。兩者都產生相同的遷移腳本(使用DROP STATISTICS xyz.abc) –