联合所有错误必须具有相同数量的表达式

时间:2018-06-15 09:09:29

标签: sql-server tsql union

我正在尝试运行此查询,但我收到此错误:

  

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

我在这里做错了什么?请帮忙。

onWindowFocusChanged

3 个答案:

答案 0 :(得分:5)

您的内部查询部分

Select *
FROM        #x 
union all  
select * 
from MartDB.DBO.BAW_AllSources_Stage1

在参与UNION的两个查询中都有*。

检查并查看两个*是否按顺序转换为相同数量的列和数据类型。

答案 1 :(得分:0)

来自Microsoft Docs:

  

以下是组合两个结果集的基本规则   使用UNION进行查询:

     
      
  • 列的数量和顺序必须相同   查询。
  •   

更多信息here

因此,您必须保证select语句以相同的顺序提取相同数量的列,因此最佳做法是避免使用*union union all

改为使用显式列名:

SELECT *
into       #xx 
From (
Select col_1, col_2, col_3 -- ... , col_n 
FROM        #x 
union all  
select col_1, col_2, col_3 -- ... , col_n 
from MartDB.DBO.BAW_AllSources_Stage1
) AAAsds

答案 2 :(得分:0)

两个Selects必须返回相同数量的列和匹配的数据类型。如果一个Select返回一个附加列,则可以在第二个选择中使用NULL

select integercol1, integercol2, varcharcol3, NULL
from t1
union
select integercol1, NULL,        varcharcol3, varcharcol4
from t2

。如果您收到有关非匹配数据类型的错误,可以将其转换为cast(NULL as TIME)