我的数据库中有一个表(DB_TableInfo),如下所示
TableId Type
859374678 R
579845658 B
478625849 R
741587469 E
.
.
.
此表表示我的数据库中的所有表。我想做的是写一个查询来选择类型'R'的表,获取他们的Id并返回属于该Id的表的名称(TableName列在指定的表中不可用)
有人可以帮帮我吗?
我想写一个与此类似的查询!
SELECT TableID = OBJECT_NAME FROM [DB_TableInfo] WHERE Type = 'R'
答案 0 :(得分:2)
从提到sys.objects
并使用方括号,我假设您使用的是SQL Server。
您可以使用object_name
功能。
SELECT OBJECT_NAME(TableID) /*Might match objects that aren't tables as well though*/
FROM [DB_TableInfo]
WHERE Type = 'R'
或加入sys.tables
SELECT T.name
FROM [DB_TableInfo] D
join sys.tables T ON D.TableID = T.object_id
WHERE D.Type = 'R'
并排除空表
SELECT t.name
FROM DB_TableInfo d
JOIN sys.tables t ON d.TableId = t.object_id
JOIN sys.dm_db_partition_stats ps ON ps.object_id = t.object_id
WHERE d.Type = 'R' and ps.index_id <= 1
GROUP BY d.TableId, t.name
HAVING SUM(ps.row_count) > 0