背景
我们正在使用针对 SQL Server 2012 的 SQL Server 数据工具(SQL 项目),它使用 DACPAC 发布到我们不同的环境。
问题
每当我们发布 SSDT 时,都会根据生成的发布脚本删除和重新创建同义词。我们希望防止这种情况发生,因为我们有一个存储过程负责为每个环境设置正确的同义词目标。
GO
PRINT N'Dropping [dbo].[MY_SYNONYM]...';
GO
DROP SYNONYM [dbo].[MY_SYNONYM];
GO
PRINT N'Creating [dbo].[MY_SYNONYM]...';
GO
CREATE SYNONYM [dbo].[MY_SYNONYM] FOR [MY_DEFAULT_TARGET];
我已经尝试将同义词的构建操作设置为
Build
以外的任何其他内容,但这会导致编译器出现问题并导致构建失败。
我们的主要目标是防止为未更改目标的同义词重新创建同义词。我们知道我们可以通过利用
sys.synonyms
进行比较来在我们的存储过程中处理这个问题。感谢您的帮助,谢谢。
编辑:
我可以在高级发布设置上看到 ff,但我们不想启用
Drop objects in target but not in source
。我们希望项目中的同义词不会在发布期间重新创建。
感谢@Bill Jetzer 的推荐,我能够在发布配置文件中找到 ff:
显然,如果我们想使用命令行执行此操作,则
SqlPackage有一个选项
/p:ExcludeObjectType=Synonyms
。
勾选排除同义词后,在发布配置文件中添加了以下行:
<PropertyGroup>
...
<ExcludeSynonyms>True</ExcludeSynonyms>
</PropertyGroup>
排除不适用于我,也适用于下面提到的其他人。 需要帮助看看是否还遗漏了什么。
https://www.codeproject.com/Questions/5261229/How-to-ignore-exclude-security-object-when-publish