sql-server-data-tools - SSDT 数据库项目中对象未解析引用的解决方案
问题描述
我想建立一个 sql server 数据库的 dacpac。我使用 ssdt 将数据库对象导入到项目中。构建成功,没有任何错误,但有很多与未解决的引用相关的警告(超过 100 个)。
未解决的参考点是由于以下原因:
- 来自同一服务器中其他数据库的对象。(警告 SQL71562)
-来自其他 sql server 实例的其他数据库的对象(警告 SQL71562)
- 引用同一数据库本身的对象,其中使用了 3 部分命名约定 [DatabaseName].[SchemaName].[ObjectName](警告 SQL71562)
- 包含对对象的未解析引用。该对象不存在或引用不明确,因为它可以引用以下任何对象。(警告 SQL71562)
- 对象定义 [xxx].[#xyz] 仅在大小写上与对象定义 [xxx].[#xyz] 不同(SQL 警告:SQL71558)
- 警告 SQL71562:计算列:[#abc].[def] 包含对对象的未解析引用。对象不存在或引用不明确,因为它可能引用以下任何对象:
我尝试部署只有警告但部署没有成功的构建。
我对 SSDT 很陌生,非常感谢任何帮助。
提前致谢。:)
解决方案
这里有几个问题需要解决,最简单的问题是大小写和 3 部分名称。
对于 3 部分名称,在所有 *.sql 文件中执行查找/替换以替换 [databasename].[dbo]。与 [dbo]。括号/非括号项目的各种组合就足够了。
对于大小写差异,如果它们不是很多,请修复它们。否则,您可以为该特定警告编号设置全局忽略。
外部数据库引用将变得更加棘手 - 这需要外部数据库引用(使用 dacpac)或指向另一个可编译项目的指针。我发现 dacpac 刚开始更容易,但这是你必须玩的东西。我在我的博客 @ https://schottsql.com/all-ssdt-articles上有一些关于 SSDT 的内容,可能对那里有帮助。(注意 - 文章很旧,但概念没有太大变化)
对于其余部分,您可能必须根据具体情况处理这些问题。有些可能是因为它们所依赖的对象使用“相同的数据库,三部分名称”约定,并且在更改时将得到解决。有些可能是由于外部参考。这些将需要一些工作来解决。如果项目构建成功,您可以尝试生成脚本或发布/比较。
推荐阅读
- python - 当等于或大于 0 时对三个连续数字求和 - Python
- blazor - 将 Microsoft.Identity.Web 与 Blazor 服务器应用程序一起使用时出现问题
- python - 如何在 Python 中制作一个只需要满足一定比例条件的条件 If 语句?
- windows - 我可以将 Windows 子进程的输出发送到父进程吗?
- ajax - 带有 Spring Boot 的 Ajax
- c# - 无法将 System.Threading.Tasks.Task... 转换为 System.Threading.Tasks.Task... 尽管看似相同的类型
- numpy - Opencv二进制掩码转换为白色和蓝色掩码
- kubernetes - k8s 服务 loadBalancerSourceRanges 不支持 IPv6
- performance - 是什么导致不同 Zen 1 处理器在一个简单的基准测试中出现巨大的性能差异?
- javascript - toDataURL 的处理——将convascontext 转换为canvashtml