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

问题描述 投票:0回答:1

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

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

  • 来自同一服务器中其他数据库的对象。(警告SQL71562)

-其他SQL Server实例中其他数据库的对象(警告SQL71562)

-引用使用三部分命名约定的同一数据库本身的对象[DatabaseName]。[SchemaName]。[ObjectName](警告SQL71562)

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

-对象定义[xxx]。[#xyz]与对象定义[xxx]只是大小写不同。[#xyz](SQL警告:SQL71558)

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

我曾尝试部署仅包含警告,但部署失败的构建。

我对SSDT相当陌生,非常感谢您的帮助。

谢谢。 :)

sql-server-data-tools database-project
1个回答
0
投票

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

对于三部分名称,在所有* .sql文件中进行查找/替换以替换[数据库名称]。[dbo]。与[dbo]。并且带方括号/非方括号的项目的各种组合应足够。

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

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

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

© www.soinside.com 2019 - 2024. All rights reserved.