我有数百个表,每个表包含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 :(得分: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
然后你可以用结果做各种事情(例如转动它等)
答案 1 :(得分:-1)
下面的查询完全相同。所以你不需要内部和外部查询。
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
ORDER BY COLUMN_NAME