【发布时间】:2020-07-09 13:21:41
【问题描述】:
背景
我们正在使用面向 SQL Server 2012 的 SQL Server Data Tools(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。我们希望项目中的同义词在发布期间不会被重新创建。
【问题讨论】:
-
您是否尝试过
SqlPackage.exe /a:publish ... /p:DoNotDropObjectType=Synonyms或SqlPackage.exe /a:publish ... /p:ExcludeObjectType=Synonyms来查看是否会更改生成的部署脚本? (SqlPackage documentation) -
@BillJetzer 我会调查的。在 Visual Studio 中是否有
/p:DoNotDropObjectType=Synonyms的等效配置?我一直在摆弄配置,除了在目标数据库中找到但不在项目中的对象外,没有找到任何配置,为此我可以配置不删除哪些对象,但如果它不存在,我必须启用删除首先在项目中,这不是我们想要的。 -
如果您在项目和数据库之间进行架构比较怎么办?单击齿轮,然后翻转到对象类型选项卡并取消选中同义词,然后单击“比较”,然后单击“生成脚本”
-
@BillJetzer
/p:ExcludeObjectType=Synonyms工作,在Advanced Publish Settings > ignore下找到它。有了这个,我可以继续更改我们的 SP,它使用正确的底层对象创建同义词。随意发布它作为这个问题的答案。 -
确保数据库属性与项目高级属性中设置的相同。尝试将它们全部对齐。
标签: sql-server sql-server-2012 sql-server-data-tools