如何识别SSMS中包含相同数据的不一致列标题

时间:2019-06-18 20:31:28

标签: sql-server tsql

我有一个数据库,并且有多个包含PK和FK的表,但是它们的名称不一致。例如,包含相同的数据,我有以下字段:EmpID,Employee_ID,Eid等。

我看到SQL Redgate有一个数据字典生成工具,但是在功能上我看不到聚合所有相同列数据的方法。

1 个答案:

答案 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

这段代码几乎完全是我在某个时候找到并保存下来的,所以对我没有任何帮助。但是我也不认识作者,所以有……