Sql sys.columns显示详细信息,但sys.tables中缺少表

Sql sys.columns显示详细信息,但sys.tables中缺少表,sql,sql-server,sql-server-2014,Sql,Sql Server,Sql Server 2014,我想知道数据库中哪个表中存在某一列。所以我使用了带有where条件的sys.columns,这给了我一些object\u id select * from sys.columns where name like 'mycol%' 接下来,我从上面的查询接收到的对象_id中查找这个表的实际名称,如下从sys.tables中所示。但是我的select语句返回一个空结果。这是否意味着数据库中不存在这样的表。如果是这样,sys.columns如何告诉我我要查找的列位于具有此对象id的表中 select

我想知道数据库中哪个表中存在某一列。所以我使用了带有where条件的sys.columns,这给了我一些object\u id

select * from sys.columns where name like 'mycol%'
接下来,我从上面的查询接收到的对象_id中查找这个表的实际名称,如下从sys.tables中所示。但是我的select语句返回一个空结果。这是否意味着数据库中不存在这样的表。如果是这样,sys.columns如何告诉我我要查找的列位于具有此对象id的表中

select * from sys.tables where object_id='584895884'

我使用的是Microsoft SQL Server 2014。

这意味着它不是表,而是视图、表值函数或其他几种类型的对象之一。改用这个:

挑选* 从sys.objects 其中[object_id]=584895884; 请注意,[object_id]字段是一个数字,而不是字符串,因此不应引用

您也可以在单个查询中执行此操作:

挑选* 来自sys.sc列 内部连接sys.so对象 ON so.[object\u id]=sc.[object\u id] 其中sc.name如N'mycol%'; sys.objects中的type和type_desc字段将指示列所在的对象类型。我在我的一个数据库中看到的可能性是:

类型描述类型 CLR_表_值函数FT 内部表格IT SQL\u内联\u表\u值\u函数如果 SQL\表\值\函数TF 系统表 类型表TT 用户_表U 视图V


sys.tables系统视图将只包含U/USER\U TABLE类型的对象。

非常感谢,它可以工作。sys.tables是否像sys.objects的子集,只包含U/USER\U TABLE。我看到sys.objects包含许多类似于上面列出的类型。@IAMTubby是的,有许多特定于对象类型的系统视图,如sys.views、sys.sql_模块(用于过程、函数、视图,可能还有触发器等)。但这些不仅仅是sys.objects的过滤视图;其中许多/大多数包含特定于该对象类型的附加或不同字段。查看从sys.system_视图中选择*的结果;对于所有选项。