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

sys.columns shows details but table missing from sys.tables

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

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

接下来,我着手从上述查询收到的 object_id 中找到此 table 的实际名称,如下来自 sys.tables。但是我的 select 语句 returns 结果是空的。这是否意味着数据库中不存在这样的table。如果是这样,sys.columns 是如何告诉我我要查找的列位于 table 和 object_id 中?

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

我正在使用 Microsoft SQL Server 2014。

表示它不是table,而是View,或者Table-Valued Function,或者其他几种类型的对象之一。改用这个:

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%';

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

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)
VIEW (V)

sys.tables 系统视图将仅包含 U / USER_TABLE.

类型的对象