相同的错误代码具有不同的错误。
无法导入包。警告 SQL72012:对象 [PreProd_Data] 存在于目标中,但即使您选中了“为目标数据库中但不在源数据库中的对象生成删除语句”复选框,它也不会被删除。
警告 SQL72012:对象 [PreProd_Log] 存在于目标中,但即使您选中了“为目标数据库中但不在源中的对象生成删除语句”复选框,它也不会被删除。
错误 SQL72014:.Net SqlClient 数据提供程序:消息 102,级别 15,状态 1,第 5 行“OPTIMIZE_FOR_AD_HOC_WORKLOADS”附近的语法不正确。
错误 SQL72045:脚本执行错误。执行的脚本: IF EXISTS (SELECT 1 FROM [master].[dbo].[sysdatabases] WHERE [name] = N'$(DatabaseName)') BEGIN ALTER DATABASE SCOPED CONFIGURATION SET OPTIMIZE_FOR_AD_HOC_WORKLOADS = ON; 结尾
解决方案
此博客将帮助编辑 model.xml 以删除 SQL Server 2017 实例中不需要的 OPTIMIZE_FOR_AD_HOC_WORKLOADS 的关系命令。
https://blogs.msdn.microsoft.com/azuresqldbsupport/2017/08/16/editing-a-bacpac-file/
制作 bacpac 文件的副本(以防出错)。将文件扩展名更改为zip,然后将其解压缩到一个文件夹中。令人惊讶的是,bacpac 实际上只是一个 zip 文件,而不是专有且难以进入的东西。找到 model.xml 文件并对其进行编辑以删除如下所示的部分:
相关步骤在这里重写:
制作 bacpac 文件的副本(以防出错)。
将文件扩展名更改为zip,然后将其解压缩到一个文件夹中。令人惊讶的是,bacpac 实际上只是一个 zip 文件,而不是专有且难以进入的东西。
找到 model.xml 文件并对其进行编辑以删除如下所示的部分:
<Relationship Name="GenericDatabaseScopedConfigurationOptions">
<Entry>
<References Name="[OPTIMIZE_FOR_AD_HOC_WORKLOADS]" />
</Entry>
</Relationship>
从 model.xml 中删除以下块
<Element Type="SqlGenericDatabaseScopedConfigurationOptions" Name="[OPTIMIZE_FOR_AD_HOC_WORKLOADS]">
<Property Name="GenericValueType" Value="2" />
<Property Name="GenericValue" Value="ON" />
</Element>
保存并关闭 model.xml。
现在您需要重新生成 model.xml 的校验和,以便 bacpac 不会认为它被篡改(因为您只是篡改了它)。创建一个名为 computeHash.ps1 的 PowerShell 文件并将此代码放入其中。
运行 PowerShell 脚本并为其提供解压缩和编辑后的 model.xml 文件的文件路径。它将返回一个校验和值。
复制校验和值,然后打开 Origin.xml 并替换现有的校验和。
保存并关闭 Origin.xml,然后选择所有文件并将它们放入一个新的 zip 文件中,并将扩展名重命名为 bacpac。
现在 bacpack 文件将准备好导入,它对我有用。
谢谢。