我正在尝试运行此查询,但我收到此错误:
使用UNION,INTERSECT或EXCEPT运算符组合的所有查询在其目标列表中必须具有相同数量的表达式。
我在这里做错了什么?请帮忙。
onWindowFocusChanged
答案 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)