2015-11-17 6 views
0

У меня есть сотни таблиц, содержащих по 400 столбцов. Я хочу найти имена общих столбцов между этими таблицами. Как я могу это сделать. Я нашел код онлайн, который работает, но только для меньшего количества таблиц. Когда я запускаю запрос в моем случае, я получаю следующую ошибку:> «Обработчик запросов исчерпал внутренние ресурсы и не смог создать план запроса. Это редкое событие и ожидается только для чрезвычайно сложных запросов или запросов, которые ссылаются на очень большое количество таблиц или разделов. Пожалуйста, упростите запрос. Если вы считаете, что получили это сообщение по ошибке, обратитесь в Службу поддержки клиентов за дополнительной информацией. 'Поиск общих столбцов между несколькими таблицами

Вот запрос:

insert into temp_table 
    select column_name from information_schema.columns where table_name = 'test_datajuly17' 
    intersect select column_name from information_schema.columns where table_name = 'test_datajuly20' 
    intersect select column_name from information_schema.columns where table_name = 'test_datajuly21' 

Любая помощь будет оценена. Спасибо

+0

... который запроса ? Я не вижу запрос – Coffee

+0

вставку в temp_table выберите column_name из INFORMATION_SCHEMA.COLUMNS где table_name = 'test_datajuly17' пересекающих выберите column_name из INFORMATION_SCHEMA.COLUMNS где table_name = 'test_datajuly20' пересекаются выберите column_name из INFORMATION_SCHEMA.COLUMNS где table_name = 'test_datajuly21' –

+0

Это запрос для трех таблиц –

ответ

-1

Ниже приведено то же самое. Поэтому вам не нужен внутренний и внешний запрос.

ВЫБОР COLUMN_NAME ОТ INFORMATION_SCHEMA.COLUMNS ISC INNER JOIN @TEMPTABLE TT на tt.TableName = isc.TABLE_NAME GROUP BY COLUMN_NAME HAVING COUNT (*)> 1 ORDER BY COLUMN_NAME

1

Вы можете сделать что-то вроде ниже.

Если вы знаете таблицы, которые вы хотите сравнить с, поставить имя таблицы в временную таблицу (@TEMPTABLE), а затем сделать ниже

DECLARE @TEMPTABLE AS TABLE 
(
    TableName VARCHAR(32) 
) 

INSERT INTo @TEMPTABLE 
VALUES 
('spt_fallback_dev'), --test names 
('spt_values') 



SELECT fulllist.* 
FROM INFORMATION_SCHEMA.COLUMNS fulllist 
INNER JOIN @TEMPTABLE baseCmp on baseCmp.TableName = fulllist.TABLE_NAME 
INNER JOIN 
    (SELECT COLUMN_NAME 
     FROM INFORMATION_SCHEMA.COLUMNS isc 
     INNER JOIN @TEMPTABLE tt on tt.TableName = isc.TABLE_NAME 
     GROUP BY COLUMN_NAME 
     HAVING COUNT(*) > 1) temp on temp.COLUMN_NAME = fulllist.COLUMN_NAME 
ORDER BY COLUMN_NAME 

Затем вы можете сделать все виды вещей, в результате (например, поворот и т. д.)

+0

Этот запрос не дает общих столбцов между таблицами –

+0

Он просто дает все столбцы, которые присутствуют во всех таблицах. –

+0

О, тогда я знаю проблему, это внешний запрос. Я могу это исправить. – TYY

Смежные вопросы