我想知道数据库中哪个表存在某个列。所以我使用带有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。
答案 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_desc
和sys.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
类型的对象。