首页 > 解决方案 > SSDT 数据库项目中对象未解析引用的解决方案

问题描述

我想建立一个 sql server 数据库的 dacpac。我使用 ssdt 将数据库对象导入到项目中。构建成功,没有任何错误,但有很多与未解决的引用相关的警告(超过 100 个)。

未解决的参考点是由于以下原因:

-来自其他 sql server 实例的其他数据库的对象(警告 SQL71562)

- 引用同一数据库本身的对象,其中使用了 3 部分命名约定 [DatabaseName].[SchemaName].[ObjectName](警告 SQL71562)

- 包含对对象的未解析引用。该对象不存在或引用不明确,因为它可以引用以下任何对象。(警告 SQL71562)

- 对象定义 [xxx].[#xyz] 仅在大小写上与对象定义 [xxx].[#xyz] 不同(SQL 警告:SQL71558)

- 警告 SQL71562:计算列:[#abc].[def] 包含对对象的未解析引用。对象不存在或引用不明确,因为它可能引用以下任何对象:

我尝试部署只有警告但部署没有成功的构建。

我对 SSDT 很陌生,非常感谢任何帮助。

提前致谢。:)

标签: sql-server-data-toolsdatabase-project

解决方案


这里有几个问题需要解决,最简单的问题是大小写和 3 部分名称。

对于 3 部分名称,在所有 *.sql 文件中执行查找/替换以替换 [databasename].[dbo]。与 [dbo]。括号/非括号项目的各种组合就足够了。

对于大小写差异,如果它们不是很多,请修复它们。否则,您可以为该特定警告编号设置全局忽略。

外部数据库引用将变得更加棘手 - 这需要外部数据库引用(使用 dacpac)或指向另一个可编译项目的指针。我发现 dacpac 刚开始更容易,但这是你必须玩的东西。我在我的博客 @ https://schottsql.com/all-ssdt-articles上有一些关于 SSDT 的内容,可能对那里有帮助。(注意 - 文章很旧,但概念没有太大变化)

对于其余部分,您可能必须根据具体情况处理这些问题。有些可能是因为它们所依赖的对象使用“相同的数据库,三部分名称”约定,并且在更改时将得到解决。有些可能是由于外部参考。这些将需要一些工作来解决。如果项目构建成功,您可以尝试生成脚本或发布/比较。


推荐阅读