我们在项目中使用了两个架构(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错误的混乱中丢失。
你有什么想法,问题可能是什么?
答案 0 :(得分:3)
我刚刚找到了解决方案。虽然我无法读取您的(似乎是德语)足以知道您是否引用了系统视图,但如果是这样,则必须提供对master的数据库引用。否则,添加任何其他必需的数据库引用应该可以解决问题。
此处对系统视图进行了描述:Resolve reference to object information schema tables
和for other database references。
此处提供了更多信息:Resolving ambiguous references in SSDT project for SQL Server
答案 1 :(得分:2)
我们有一个项目,其中包含一个引用另一个数据库中的表值函数的视图。添加解析远程数据库使用的字段所需的数据库引用后,我们仍然收到此错误。我发现表值函数是使用“SELECT * FROM ...”定义的,这是由不熟悉良好编码实践的人创建的旧代码。我用所需的枚举字段替换了“*”部分并编译了该函数,然后为该数据库重新创建了dacpac以捕获结果模式,并将新的dacpac合并为数据库引用。呜呜!模棱两可的参考文献消失了!似乎SSDT引擎不能(或不能)总是能够进入所引用的dacpac的内部,以便返回所有字段。当然,我工作的项目通常非常大,所以我认为在要求他们验证代码时,给工具提供所有帮助是有意义的。
答案 2 :(得分:1)
我知道这是一个老问题,但它是第一个在搜索错误时弹出的问题。
在我的情况下,错误阻止我在Visual Studio 2017中执行SqlSchemaCompare。但是错误是表格的表/索引不再是解决方案的一部分。简单的清理/重建没有帮助。
重新加载视觉工作室解决方案就可以了。
答案 3 :(得分:1)
尽管这是一个老话题,但它在搜索引擎中的排名很高,因此我将分享对我有用的解决方案。
我在Visual Studio 2017 SQL Server项目的脚本文件中的CREATE TYPE
语句中遇到了相同的错误代码,因为我找不到如何从界面。
解决方案是,在Visual Studio中,除了通过右键单击> Add 可以看到的文件类型以外,还有许多可编程文件类型。只需选择新元素,然后在搜索字段中找到您要创建的元素即可。
答案 4 :(得分:1)
对我来说,我在用户定义的表类型上看到了SQL71501。原来,我的解决方案中表类型的sql文件未设置为build。我将构建操作从“无”更改为“构建”后,该错误消失了。
答案 5 :(得分:0)
就我而言,尝试导出数据层应用程序时遇到此错误。该错误与数据库用户上的链接有关。要解决此问题,您需要以具有系统用户读取权限的身份登录服务器。
答案 6 :(得分:0)
就我而言,当我双击该文件并打开它时,我发现对ColumnX
的引用之一没有使用两部分名称,因此SSDT无法确定它属于哪个表,而且该列是否存在于表中。一旦我添加了两个部分的名称。答对了!我没有错误!
答案 7 :(得分:0)
在我的情况下,我只需双击错误,它就会带我到过程中的确切错误,我注意到表列被删除或重命名,但在 SP 中它仍然使用旧列名。