UNION ALL仅在SQL Server 2017中返回错误的前1个结果

时间:2018-05-30 08:26:16

标签: sql-server sql-server-2017

最近从SQL Server 2016升级到2017我遇到了一个奇怪的错误,我把它缩小到:

select top 1 * from (
    select top 1 id from [user]
    union all
    select 0
) a

现在如果我在SQL Server 2016中运行它,我会得到

  

1

如果我在2017年运行它,我会

  

0

如果我将select top 1 *更改为select *

  

1

     

0

在SQL Server 2016和2017中......

如果我按照

更新查询
select top 1 * from (
    select top 1 id from [user]
    union all
    select 0
) a order by id desc

然后我在SQL Server 2016和2017中都得到了正确的结果1.

这是查询优化器看到'选择0'更快并返回结果?

1 个答案:

答案 0 :(得分:0)

您是否尝试使用ORDER BY 1 DESC

它应解决两个版本的问题

select top 1 * from (
    select top 1 id from [user]
    union all
    select 0
) a ORDER BY 1 DESC