SQL视图、子查询中使用ORDER BY报错

默认情况下,如果在子查询,函数,视图中尝试去使用ORDER BY,如:

1
select * from (select * from tab where ID>20 order by userID desc) as a order by date desc

可能会遇到下面的错误提示:

除非另外还指定了 TOP 或 FOR XML,否则,ORDER BY 子句在视图、内联函数、派生表、子查询和公用表表达式中无效。

  • 上述错误产生的原因:针对一个表的SELECT其实并不是返回一个表,而是一个游标。如果一定要使用,则需要配合TOP 100 PERCENT使用:
1
select * from (select top 100 percent * from tab where ID>20 order by userID desc) as a order by date desc