2010-05-04 66 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