我有一个数据库,并且有多个包含PK和FK的表,但是它们的名称不一致。例如,包含相同的数据,我有以下字段:EmpID,Employee_ID,Eid等。
我看到SQL Redgate有一个数据字典生成工具,但是在功能上我看不到聚合所有相同列数据的方法。
答案 0 :(得分:1)
您说您有FK,因此可以从中建立一个清单。您必须注意,它不一定是完整列表-它只是外键中定义的列的列表。除此以外,您的选择是,正如Sean提到的“可怕的混战”一样,也不能保证拥有所有比赛。逻辑列匹配不一定必须被命名为任何远程相似的名称,并且您很可能在一个表中有一个Employee_ID列来匹配模糊的东西……例如UrineSupplier(例如……)
但严格来说,是针对FK的关系...
SELECT obj.name AS FK_NAME,
sch.name AS [schema_name],
tab1.name AS [table],
col1.name AS [column],
tab2.name AS [referenced_table],
col2.name AS [referenced_column]
FROM sys.foreign_key_columns fkc
INNER JOIN sys.objects obj
ON obj.object_id = fkc.constraint_object_id
INNER JOIN sys.tables tab1
ON tab1.object_id = fkc.parent_object_id
INNER JOIN sys.schemas sch
ON tab1.schema_id = sch.schema_id
INNER JOIN sys.columns col1
ON col1.column_id = parent_column_id AND col1.object_id = tab1.object_id
INNER JOIN sys.tables tab2
ON tab2.object_id = fkc.referenced_object_id
INNER JOIN sys.columns col2
ON col2.column_id = referenced_column_id AND col2.object_id = tab2.object_id
WHERE col1.name <> col2.name
这段代码几乎完全是我在某个时候找到并保存下来的,所以对我没有任何帮助。但是我也不认识作者,所以有……