未解决的对象引用:[INFORMATION_SCHEMA].[TABLES]

125

我创建了一个访问[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 而不是这个视图,但是对于这个视图,我收到了同样的警告。

如何解决这个警告?

4个回答

229

master 添加数据库引用:

  1. 在项目下右键单击References
  2. 选择Add database reference...
  3. 选择System database
  4. 确保选中master
  5. OK

注意,VS更新可能需要一些时间。


7
仅作提醒 - 如果有人将那些SSDT安装在不同的路径中,您可能会遇到问题。在我们上个项目中,有些人有E:驱动器,而其他人仅有C:驱动器。我们将参考文件复制出来放在共享位置,以便我们可以通过.\SharedSchemas\master.dacpac进行引用。现在这可能已经解决了,但在第一版中是一个问题。 - Peter Schott
Peter Schott说得有道理。通常最好将引用的dacpac文件复制到解决方案内的某个位置并从那里使用。 - Veysel Ozdemir
2
对我来说,它显示“您的项目中已经存在对此系统数据库的引用。”我现在卡住了! - orad
1
仅供下一个人保持一些理智 - 信不信由你,即使退出VS也不足以使此设置生效 - 我不得不重新启动计算机,然后该设置才开始工作。您还可以打开Visual Studio选项... SQL Server工具...在线编辑...启用“解析对系统视图和主数据库对象的引用”。 - NYCdotNet
对于那些使用VS 2017的人:展开您的数据库项目,右键单击“引用”,您将在此处获得“添加数据库引用”菜单项。 - ntl
显示剩余2条评论

6
在我们的项目中,我们已经有了对主分支的引用,但我们遇到了这个问题。这是我们得到的错误信息:
SQL71502: Procedure: [Schema].[StoredProc1] has an unresolved reference to object [Schema].[Table1].[Property1].

为了解决引用错误,在表格 SQL 文件上,右键单击属性并验证 BuildSettings 是否设置为 Build。
将其更改为构建即可解决问题。

在VS 2019中,我遇到了一个数据库项目的问题,该项目最初是在2017年构建的。为了解决这个问题,我不得不删除并重新添加对“master”的引用。 - Alan Hadsell

3

Sam说的是做这件事的最好方式。
然而,如果你有一个需要从没有该引用的特定位置部署dacpac的情况,你可能会遇到麻烦。 另一种方法是打开你的.project文件,并确保以下标签在你尝试运行的构建配置中具有false的值。

<TreatTSqlWarningsAsErrors>false</TreatTSqlWarningsAsErrors>

这样,您就不需要向项目添加引用。

17
这应该是最后的选择,因为你会失去 SQL 错误的反馈信息! - Jowen

0

我正在使用VS 2019,即使添加了主数据库引用仍然遇到了这个问题。通过如下图所示更改DB项目的目标平台来解决此问题。在更改后,我不得不再次删除并添加回主数据库。

enter image description here

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接