Поиск общих столбцов в SQL Server - PullRequest
0 голосов
/ 04 мая 2010

Можно ли выполнить быстрый запрос, который возвращает все столбцы с одинаковыми именами между двумя таблицами?

У меня есть много пар таблиц, которые, как я знаю, связаны друг с другом, но я не уверен, какие из 50 или около того столбцов у них общие.

Ответы [ 2 ]

6 голосов
/ 04 мая 2010
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
2 голосов
/ 04 мая 2010

Вот как вы можете получить таблицы с одинаковым именем столбца

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...