【问题标题】:SQL71501 - How to get rid of this error?SQL71501 - 如何摆脱这个错误?
【发布时间】:2015-04-29 20:30:39
【问题描述】:

我们在项目中使用了两个架构 (dbo + kal)。

当我们尝试使用以下 SQL 语句创建视图时,Visual Studio 在错误列表中显示为错误。

CREATE VIEW [dbo].[RechenketteFuerAbkommenOderLieferantenView]
AS
    SELECT
        r.Id as RechenkettenId,
        r.AbkommenId,
        r.LieferantId,
        rTerm.GueltigVon,
        rTerm.GueltigBis,
        rs.Bezeichnung,
        rs.As400Name
    FROM
        [kal].[Rechenkette] r
    JOIN
        [kal].[RechenketteTerm] rTerm ON rTerm.RechenketteId = r.Id
    JOIN
        [kal].[Basisrechenkette] br ON rTerm.BasisrechenketteId = br.Id
    JOIN
        [kal].[Rechenkettenschema] rs ON rs.Id = br.Id
    WHERE 
        r.RechenkettenTyp = 0

错误信息如下所示:

SQL71501:计算列:[dbo].[RechenketteFuerAbkommenOderLieferantenView].[AbkommenId] 包含对对象的未解析引用。对象不存在或引用不明确,因为它可能引用以下任何对象:
[kal].[Basisrechenkette].[r]::[AbkommenId], [kal].[Rechenkette].[AbkommenId], [kal].[Rechenkette].[r]::[AbkommenId], [kal]。 [Rechenkettenschema].[r]::[AbkommenId] 或 [kal].[RechenketteTerm].[r]::[AbkommenId].

发布视图和工作还不错,但是在构建我们的项目时看到错误消息总是很烦人,所有严重的错误都会在这些 sql 错误的洗牌中丢失。

你有什么想法,可能是什么问题?

【问题讨论】:

  • 将您的 Alias 名称从 r.Id as RechenkettenId, 更改为 r.Id as someId,

标签: sql sql-server visual-studio-2013


【解决方案1】:

我刚刚找到了解决方案。虽然我无法阅读您的(似乎是德语)足以知道您是否指的是系统视图,但如果是这样,则必须提供对 master 的数据库引用。否则,添加任何其他必需的数据库引用应该可以解决问题。

此处针对系统视图进行了描述:Resolve reference to object information schema tables

for other database references

此处提供更多信息:Resolving ambiguous references in SSDT project for SQL Server

【讨论】:

  • 感谢您迟到的答复。我搬到了另一家公司,不幸的是我无法再测试它了。
【解决方案2】:

我们有一个项目,其中包含一个引用另一个数据库中的表值函数的视图。添加解析远程数据库使用的字段所需的数据库引用后,我们仍然收到此错误。我发现表值函数是使用“SELECT * FROM ...”定义的,这是由不熟悉良好编码实践的人创建的旧代码。我用所需的枚举字段替换了“*”部分并编译了该函数,然后为该数据库重新创建了 dacpac 以捕获结果模式,并将新的 dacpac 合并为数据库引用。呜呼!模棱两可的引用消失了!似乎 SSDT 引擎不能(或不)总是有能力深入到引用的 dacpac 的内部以返回所有字段。可以肯定的是,我从事的项目通常都很大,所以我认为在要求工具验证您的代码时给予工具所有帮助是有意义的。

【讨论】:

    【解决方案3】:

    我知道这是一个老问题,但它是搜索错误时弹出的第一个问题。

    在我的情况下,错误阻止我在 Visual Studio 2017 中执行 SqlSchemaCompare。然而,错误是针对不再属于解决方案一部分的表的表/索引。简单的清理/重建没有帮助。

    重新加载 Visual Studio 解决方案成功了。

    【讨论】:

      【解决方案4】:

      虽然这是一个老话题,但它在搜索引擎上的排名很高,所以我会分享对我有用的解决方案。

      我遇到了与 CREATE TYPE 语句相同的错误代码,该语句位于我的 Visual Studio 2017 SQL Server 项目的脚本文件中,因为我找不到如何从界面中专门添加用户定义的类型。

      解决办法是,在Visual Studio中,除了可以通过右键单击>添加看到的文件类型之外,还有很多可编程文件类型。只需选择 New Element 并使用搜索字段来查找您要创建的元素。

      【讨论】:

        【解决方案5】:

        就我而言,我在尝试导出数据层应用程序时遇到此错误。该错误与数据库用户上的链接有关。要解决这个问题,您需要以系统用户的读取权限登录服务器。

        【讨论】:

          【解决方案6】:

          对我来说,我在用户定义的表类型上看到了 SQL71501。原来我的解决方案中表类型的sql文件没有设置为build。一旦我将构建操作从无更改为构建,错误就消失了。

          【讨论】:

            【解决方案7】:

            来自博客文章Resolving ambiguous references in SSDT project for SQL Server 的最后一段,在答案https://stackoverflow.com/a/33225020/15405769 中链接:

            就我而言,当我双击文件并打开它时,我发现 对ColumnX 的引用之一没有使用两个部分名称和 因此 SSDT 无法确定它属于哪个表,并且 此外,该列是否存在于表中。一旦我添加了 两部分名称。答对了!我没有错误!

            【讨论】:

            • 在我的情况下,只需双击错误,它就会将我带到过程中的确切错误,我注意到使用的表列已被删除或重命名,但在 sp 中它仍然是旧的列名。跨度>
            【解决方案8】:

            在我的情况下,我只是双击错误,它会带我到程序的确切错误,我注意到表列被删除或重命名,但在 SP 中它仍然使用旧的列名。

            【讨论】:

              【解决方案9】:

              如果您在 Visual Studio 中执行此操作,请确保在属性中将文件设置为“构建”。

              【讨论】:

                【解决方案10】:

                如果您构建 SSDT 项目,您可能会收到一条错误消息:

                “SQL71502:函数:[XXX].[XXX] 对对象 [XXX].[XXX] 的引用未解析。”

                如果失败的代码尝试使用“sys”架构或“INFORMATION_SCHEMA”架构中的某些内容,那么您需要添加对主 dacpac 的数据库引用:

                添加对master的数据库引用:

                在项目下,右键单击引用。 选择添加数据库引用...。

                选择系统数据库。 确保选择了主人。

                按确定。 请注意,VS 更新可能需要一段时间。

                (请注意,这是从堆栈溢出问题中逐字复制的,并添加了我的屏幕截图:https://stackoverflow.com/questions/18096029/unresolved-reference-to-obj… - 如果您通过了 tldr,我将进行更多解释,但这非常令人兴奋!)

                不是 TLDR: 我喜欢这个关于堆栈溢出的问题,因为它有一个常见问题,任何拥有导入 SSDT 的数据库项目的人都面临过这个问题。它可能不会影响所有人,但很大比例的数据库会包含一些引用不存在的东西的代码。

                这个问题有几个小亮点,我想更详细地探讨一下,因为我不认为关于堆栈溢出的评论真的对他们公正。

                如果我们看这个问题,它的开头是这样的:

                【讨论】:

                  猜你喜欢
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 2018-07-30
                  • 1970-01-01
                  • 1970-01-01
                  • 2017-04-04
                  • 1970-01-01
                  • 2020-08-04
                  相关资源
                  最近更新 更多