对对象 [INFORMATION_SCHEMA].[TABLES] 的未解决引用
Posted
技术标签:
【中文标题】对对象 [INFORMATION_SCHEMA].[TABLES] 的未解决引用【英文标题】:unresolved reference to object [INFORMATION_SCHEMA].[TABLES] 【发布时间】:2021-01-22 09:32:57 【问题描述】:我创建了一个访问 [INFORMATION_SCHEMA].[TABLES]
视图的 UDF:
CREATE FUNCTION [dbo].[CountTables]
(
@name sysname
)
RETURNS INT
AS
BEGIN
RETURN
(
SELECT COUNT(*) FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = @name
);
END
在 Visual Studio 中,视图的架构和名称都标有警告:
SQL71502:函数:[dbo].[CountTables] 对对象 [INFORMATION_SCHEMA].[TABLES] 有一个未解析的引用。
我仍然可以毫无问题地发布数据库项目,而且 UDF 似乎运行正确。 IntelliSense 为我填充了视图的名称,因此它似乎没有问题。
我还尝试将实现更改为使用 sys.objects
而不是此视图,但我也收到了针对此视图的相同警告。
我该如何解决这个警告?
【问题讨论】:
【参考方案1】:添加对master
的数据库引用:
-
在项目下,右键单击References。
选择添加数据库引用...。
选择系统数据库。
确保选择了 master。
按确定。
请注意,VS 更新可能需要一段时间。
【讨论】:
只是一个警告 - 如果有人将这些 SSDT 安装在不同的路径中,您可能会遇到问题。我们在上一个项目中遇到了这个问题,其中一些有一个 E:驱动器,而另一些只有一个 C:驱动器。我们复制了该参考文件并将其放在共享位置,以便我们可以通过 .\SharedSchemas\master.dacpac 引用它。现在可能已经解决了,但在第一个版本中是一个问题。 Peter Schott 有一个观点。通常最好将引用的 dacpac 文件复制到解决方案中的某处并从那里使用。 对我来说,它说“您的项目中已经存在对此系统数据库的引用。”我现在卡住了! 只是为了让下一个人节省一些理智-相信它或者甚至不退出VS都不足以让它坚持下去-我不得不重新启动,然后设置开始工作。您可能还希望打开 Visual Studio 选项...SQL Server 工具...在线编辑...启用“解析对系统视图和主数据库对象的引用”。 我在 Visual Studio 2017 下遇到了同样的问题,我在参考列表下看不到“数据库参考”【参考方案2】:Sam 说的是最好的方法。
但是,如果您需要从在该特定位置没有该引用的机器部署 dacpac,您可能会遇到麻烦。
另一种方法是打开您的 .project 文件,并确保以下标记具有您尝试运行的构建配置的 false
值。
<TreatTSqlWarningsAsErrors>false</TreatTSqlWarningsAsErrors>
这样您就不需要添加对项目的引用。
【讨论】:
这应该是不得已而为之,因为你会丢失关于 sql 错误的反馈!【参考方案3】:在我们的项目中,我们已经有对 master 的引用,但是我们遇到了这个问题。这是我们得到的错误:
SQL71502: Procedure: [Schema].[StoredProc1] has an unresolved reference to object [Schema].[Table1].[Property1].
要解决引用错误,在表 sql 文件上, 右键单击属性并验证 BuildSettings 是否设置为 Build。
更改它构建修复它。
【讨论】:
在 VS 2019 中,我在最初于 2017 年构建的数据库项目中遇到了这个问题。要修复它,我必须删除并重新添加对“master”的引用【参考方案4】:我使用的是 VS 2019,即使在添加主数据库引用后仍然出现此问题。通过更改数据库项目的目标平台解决了这个问题,如下图所示。在此更改后,我不得不再次删除并重新添加主数据库。
【讨论】:
以上是关于对对象 [INFORMATION_SCHEMA].[TABLES] 的未解决引用的主要内容,如果未能解决你的问题,请参考以下文章
可以对 information_schema 崩溃表进行 mysql 查询吗?
拒绝访问 MariaDB 中的 information_schema
(转)十分钟了结MySQL information_schema