如何显示SQL Server 2008数据库中所有表的分层列表?

时间:2014-06-10 17:38:14

标签: sql .net sql-server-2008

给定一个数据库,我想要一个SQL命令,它将返回所有表的分层列表。现在忍受我,因为我从未做过SQL查询。

在发布之前,我在网上搜索并找到了一些足够接近但不完全符合我想要的解决方案。

像这样的人: SQL Server: Howto get foreign key reference from information_schema?

SELECT  
 KCU1.CONSTRAINT_NAME AS FK_CONSTRAINT_NAME 
,KCU1.TABLE_NAME AS FK_TABLE_NAME 
,KCU1.COLUMN_NAME AS FK_COLUMN_NAME 
,KCU1.ORDINAL_POSITION AS FK_ORDINAL_POSITION 
,KCU2.CONSTRAINT_NAME AS REFERENCED_CONSTRAINT_NAME 
,KCU2.TABLE_NAME AS REFERENCED_TABLE_NAME 
,KCU2.COLUMN_NAME AS REFERENCED_COLUMN_NAME 
,KCU2.ORDINAL_POSITION AS REFERENCED_ORDINAL_POSITION 
FROM INFORMATION_SCHEMA.REFERENTIAL_CONSTRAINTS AS RC 

INNER JOIN INFORMATION_SCHEMA.KEY_COLUMN_USAGE AS KCU1 
ON KCU1.CONSTRAINT_CATALOG = RC.CONSTRAINT_CATALOG  
AND KCU1.CONSTRAINT_SCHEMA = RC.CONSTRAINT_SCHEMA 
AND KCU1.CONSTRAINT_NAME = RC.CONSTRAINT_NAME 

INNER JOIN INFORMATION_SCHEMA.KEY_COLUMN_USAGE AS KCU2 
ON KCU2.CONSTRAINT_CATALOG = RC.UNIQUE_CONSTRAINT_CATALOG  
AND KCU2.CONSTRAINT_SCHEMA = RC.UNIQUE_CONSTRAINT_SCHEMA 
AND KCU2.CONSTRAINT_NAME = RC.UNIQUE_CONSTRAINT_NAME 
AND KCU2.ORDINAL_POSITION = KCU1.ORDINAL_POSITION 

它很好,但它不是递归的......它只显示当前表的直接父表,如果有的话......不是所有的父表。如果它没有父母,它根本不显示该表。

我也发现了这个: Hierarchical List of All tables

EXEC sp_msdependencies @intrans = 1 

这显示了我想要的所有表的依赖关系的顺序,但是没有显示父表。 (我读到这个存储过程没有记录)。

我希望得到的结果与此类似:

Level   Table Name    Parent Table
-----------------------------------
  1     Application
  1     System
  2     Users         Application 
  2     Roles         Application 
  2     Membership    Application
  3     Membership    Users
  3     UserInRoles   Users 
  3     UserInRoles   Roles

然后我会从C#/ VB.NET中读取这个我已经具体的项目

有人可以帮忙吗?

真的很感激

0 个答案:

没有答案