SSDT数据库项目中对象未解析引用的解决方法

solution to unresolved references to objects in SSDT database project

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

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

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

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

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

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

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

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

我是 SSDT 的新手,非常感谢任何帮助。

提前致谢。 :)

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

对于 3 部分名称,在所有 *.sql 文件中执行 find/replace 以替换 [databasename].[dbo]。与 [dbo]。 bracketed/non-bracketed 项的各种组合应该足够了。

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

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

对于其余部分,您可能必须根据具体情况来解决这些问题。有些可能是因为它们所依赖的对象使用 "same database, 3-part name" 约定,并且在更改时将被解析。有些可能是由于外部参考。这些需要一些工作才能解决。如果项目构建成功,您可以尝试生成脚本或 publishing/comparing.