Sql 可视化表之间的关系
我正在努力实现以下目标: 我有几个表,其中一些包含来自其他表的主键。Sql 可视化表之间的关系,sql,sql-server,tsql,Sql,Sql Server,Tsql,我正在努力实现以下目标: 我有几个表,其中一些包含来自其他表的主键。 我试图准备一个SQLFIDLE进行澄清,您可以在这里找到它 +-----------+ +-----------+-----------+ +-----------+-----------+ +-----------+-----------+ | tblA | | tblB | | tblC | |
我试图准备一个SQLFIDLE进行澄清,您可以在这里找到它
+-----------+ +-----------+-----------+ +-----------+-----------+ +-----------+-----------+
| tblA | | tblB | | tblC | | tblD |
+-----------+ +-----------+-----------+ +-----------+-----------+ +-----------+-----------+
| ID_A | | ID_B | ID_A | | ID_C | ID_B | | ID_D | ID_C |
+-----------+ +-----------+-----------+ +-----------+-----------+ +-----------+-----------+
| 1 | | 2 | 1 | | 3 | 2 | | 4 | 3 |
+-----------+ +-----------+-----------+ +-----------+-----------+ +-----------+-----------+
我的目标是创建一个过程,返回表之间的所有可用关系,并在最后可视化(使用VB.NET)。
我想将其可视化的方式如下:
ID_A(1)
ID_B(2)
ID_C(3)<-- current
ID_D(4)
ID\u A(1)
身份证号码(2)
IDYC(3)你应该考虑递归方法。基本上,编写一个存储过程,在一个级别上解析直接依赖关系(即,表中的外键和表中的外键)。然后,一旦得到结果,就对每个结果再次调用。重复此操作,直到构建完整的层次结构
可以在SQL server中通过sys.foreign\u key\u列
和sys.objects
表查询对外关系
还要看一看这个问题:看一看这个问题:这是我用来查找表之间关系的脚本。谢谢。我的sys.foreign\u key\u columns
表怎么可能是空的?我希望您没有尝试在MasterDB中执行此脚本:)在每次调用后将每个级别的所有依赖项插入到临时表中是否是一个好主意?我的sys.foreign\u key\u columns
表怎么可能是空的?
ID_A(1)
ID_B(2)<-- current
ID_C(3)
ID_D(4)
DECLARE @TableName NVARCHAR(1000)= 'TableName'
DECLARE @ColumnName NVARCHAR(1000)= 'ColumnName'
SELECT f.name AS ForeignKey,
SCHEMA_NAME(f.SCHEMA_ID) SchemaName,
OBJECT_NAME(f.parent_object_id) AS TableName,
COL_NAME(fc.parent_object_id,fc.parent_column_id) AS ColumnName,
SCHEMA_NAME(o.SCHEMA_ID) ReferenceSchemaName,
OBJECT_NAME (f.referenced_object_id) AS ReferenceTableName,
COL_NAME(fc.referenced_object_id,fc.referenced_column_id) AS ReferenceColumnName
FROM sys.foreign_keys AS f
INNER JOIN sys.foreign_key_columns AS fc ON f.OBJECT_ID = fc.constraint_object_id
INNER JOIN sys.objects AS o ON o.OBJECT_ID = fc.referenced_object_id
WHERE OBJECT_NAME(f.parent_object_id) = @TableName AND COL_NAME(fc.parent_object_id,fc.parent_column_id) = @ColumnName
GO