根据表ID查询表名

Red*_*eda 3 sql

我的数据库中有一个表(DB_TableInfo),如下所示

TableId         Type
859374678        R
579845658        B
478625849        R
741587469        E
.
.
.
Run Code Online (Sandbox Code Playgroud)

该表代表我的数据库中的所有表。我想要做的是编写一个查询来选择“R”类型的表,获取它们的 Id 并返回属于该 Id 的表的名称(TableName 列在指定的表中不可用)

有人可以帮我吗?

我想写一个与此类似的查询!

SELECT TableID = OBJECT_NAME FROM [DB_TableInfo] WHERE Type = 'R' 
Run Code Online (Sandbox Code Playgroud)

Mar*_*ith 5

从方括号的提及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' 
Run Code Online (Sandbox Code Playgroud)

或者加入sys.tables

SELECT T.name
 FROM [DB_TableInfo] D 
 join sys.tables T ON D.TableID = T.object_id
 WHERE D.Type = 'R' 
Run Code Online (Sandbox Code Playgroud)

并排除空表

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
Run Code Online (Sandbox Code Playgroud)