2010-05-04 46 views
0

是否有可以运行的快速查询,返回两个表之间的所有相同名称的列?在SQL Server中查找共享列

我有许多表我知道是绑在一起,但我不知道他们有50共同列中的哪一列。

回答

6
select COLUMN_NAME 
from INFORMATION_SCHEMA.COLUMNS 
where TABLE_NAME in ('Table1', 'Table2') 
group by COLUMN_NAME 
having count(*) > 1 

你也可以做这样的事情来找到所有的对而不指定名字。这将匹配上的意见,以及:如果你要排除的观点

select c1.COLUMN_NAME, c1.TABLE_NAME as Table1, c2.TABLE_NAME as Table2 
from INFORMATION_SCHEMA.COLUMNS c1 
inner join INFORMATION_SCHEMA.COLUMNS c2 on c1.COLUMN_NAME = c2.COLUMN_NAME and c1.TABLE_NAME <> c2.TABLE_NAME 
order by 2, 1 

,你可以这样做:

select c1.COLUMN_NAME, c1.TABLE_NAME as Table1, c2.TABLE_NAME as Table2 
from INFORMATION_SCHEMA.COLUMNS c1 
inner join INFORMATION_SCHEMA.COLUMNS c2 on c1.COLUMN_NAME = c2.COLUMN_NAME and c1.TABLE_NAME <> c2.TABLE_NAME 
inner join INFORMATION_SCHEMA.TABLES t1 on c1.TABLE_NAME = t1.TABLE_NAME and t1.TABLE_TYPE = 'BASE TABLE' 
inner join INFORMATION_SCHEMA.TABLES t2 on c2.TABLE_NAME = t2.TABLE_NAME and t2.TABLE_TYPE = 'BASE TABLE' 
order by 2, 1 
+0

@smoore:更新显示所有不包含视图的匹配 – RedFilter 2010-05-04 17:30:37

+0

谢谢,这就是我一直在寻找的。 – 2010-05-04 17:41:30

2

这里是你如何能得到具有相同的列名的表

SELECT TABLE_NAME, COLUMN_NAME 
FROM INFORMATION_SCHEMA.COLUMNS 
WHERE COLUMN_NAME IN 
(
    SELECT COLUMN_NAME 
    FROM INFORMATION_SCHEMA.COLUMNS 
    GROUP BY COLUMN_NAME 
    HAVING COUNT (*) > 1 
) 
ORDER BY COLUMN_NAME, TABLE_NAME