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

时间:2015-01-22 15:25:42

标签: sql sql-server sql-server-2014

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

select * from sys.columns where name like 'mycol%'

接下来,我从上面的查询中收到的object_id中查找该表的实际名称,如下所示:sys.tables。但是我的select语句返回一个空结果。这是否意味着数据库中不存在这样的表。如果是这样,sys.columns如何告诉我我要查找的列位于具有此object_id的表中?

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

我正在使用Microsoft SQL Server 2014。

1 个答案:

答案 0 :(得分:1)

这意味着它不是一个表,而是一个View或一个Table-Value的函数,或者是其他几种类型的对象之一。请改用:

SELECT *
FROM sys.objects
WHERE [object_id] = 584895884;

请注意,[object_id]字段是一个数字,而不是字符串,因此不应引用。

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

SELECT *
FROM   sys.columns sc
INNER JOIN sys.objects so
        ON so.[object_id] = sc.[object_id]
WHERE sc.name LIKE N'mycol%';

type中的type_descsys.objects字段将指示找到该列的对象类型。我在其中一个数据库中看到的可能性是:

  

type_desc(type)   

<小时/>   CLR_TABLE_VALUED_FUNCTION(FT)
  INTERNAL_TABLE(IT)
  SQL_INLINE_TABLE_VALUED_FUNCTION(IF)
  SQL_TABLE_VALUED_FUNCTION(TF)
  SYSTEM_TABLE(S)
  TYPE_TABLE(TT)
  USER_TABLE(U)
  查看(V)

sys.tables系统视图只包含U / USER_TABLE类型的对象。