SSDT / SqlPackage丢弃统计信息

时间:2017-03-09 09:44:25

标签: sql-server-data-tools dacpac sqlpackage

在构建期间,我们基于SSDT .sqlproject生成数据库的dacpac文件。此dacpac稍后使用sqlpackage部署到生产中。 尽管使用了/ p:DropStatisticsNotInSource = False开关,sqlpackage将删除在sqlproject与生产数据库最后一次同步后添加的所有统计信息。

我们还可以使用发布配置文件和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不丢弃统计信息?

1 个答案:

答案 0 :(得分:2)

问题是使用DropObjectsNotInSource=True,它会覆盖DropStatisticsNotInSource=False选项。这可能是错误,也未在sqlpackage.exe文档中指定。

一种可能的解决方法是使用Ed的AgileSqlClub SSDT过滤器 艾略特正如this blog中所解释的那样。在这种情况下,您需要使用AgileSqlClub.SqlPackageFilter.dll并添加以下选项:

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