如何识别导致联合错误的列

时间:2017-02-22 10:02:24

标签: sql sql-server union sql-server-2014

我正在尝试在40个表中的UNION 25个字段,这些字段来自10个不同的数据库。

当我尝试将它们组合在一起时,我收到了以下错误:

  

使用UNION,INTERSECT或EXCEPT运算符组合的所有查询都必须   在目标列表中有相同数量的表达式。

识别哪些字段的格式不同的最快方法是什么,或者是否有另一种方法可以使用SAS中的“强制”命令对这些表进行UNION。

我目前正在使用SQL Server 2014.

1 个答案:

答案 0 :(得分:1)

可能最快的方法是使用information_schema.columns。例如,如果您对每个表使用select *,那么您可以通过计算列出现的表来获取有问题的列:

select column_name, count(*)
from information_schema.columns
where table_schema = @schema and
      table_name in ( . . . )
group by column_name
having count(*) <> 40;

我会注意到,为此目的使用select *表示数据库设计不佳。而不是具有相同格式的多个表,您应该有一个包含所有组合数据的表。