sql:除非另外还指定了 TOP 或 FOR XML,否则,ORDER BY 子句在视图、内联函数、派生表、子查询

执行sql语句:

select * from (

select * from tab where ID>20 order by userID desc

) as a order by date desc

逻辑上看着挺对 但是报错:

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


只要我们在嵌套子查询视图里面加入: top 100 percent 即可

select * from (

select top 100 percent * from tab where ID>20 order by userID desc

) as a order by date desc

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

CREATE VIEW dbo.VSortedOrders
AS

SELECT orderid, customerid
FROM dbo.Orders
ORDER BY orderid
GO

 

那么可能会遇到下面的错误

消息 1033,级别 15,状态 1,第 4 行

除非另外还指定了 TOP 或 FOR XML,否则,ORDER BY 子句在视图、内联函数、派生表、子查询和公用表表达式中无效。
原因就是针对一个表的SELECT其实并不是返回一个表,而是一个游标。
 
如果一定要用怎么办呢?答案就是配合TOP 100 PERCENT
SELECT     TOP (100) PERCENT orderid, customerid
FROM         dbo.Orders
ORDER BY orderid, customerid DESC
时间: 2025-01-20 08:46:41

sql:除非另外还指定了 TOP 或 FOR XML,否则,ORDER BY 子句在视图、内联函数、派生表、子查询的相关文章

SQL Server调优系列基础篇(子查询运算总结)

原文:SQL Server调优系列基础篇(子查询运算总结) 前言 前面我们的几篇文章介绍了一系列关于运算符的介绍,以及各个运算符的优化方式和技巧.其中涵盖:查看执行计划的方式.几种数据集常用的连接方式.联合运算符方式.并行运算符等一系列的我们常见的运算符.有兴趣的童鞋可以点击查看. 本篇我们介绍关于子查询语句的一系列内容,子查询一般是我们形成复杂查询的一些基础性操作,所以关于子查询的应用方式就非常重要. 废话少说,开始本篇的正题. 技术准备 数据库版本为SQL Server2008R2,利用微软

SQL编程之子查询及注意事项

当一个查询是另一个查询的条件时,称之为子查询.子查 询可以使用几个简单命令构造功能强大的复合命令.子查询最常用于SELECT-SQL命令的 WHERE子句中.子查询是一个 SELECT 语句,它嵌套在一个 SELECT.SELECT...INTO 语句.INSERT...INTO 语句.DELETE 语句.或 UPDATE 语句或嵌套在另一子查询中. 语法:select ....from 表1 where 列1 > (子查询) 外面的查询成为父查询,圆括号嵌入的查询成为称为子查询.SQL Ser

SQL为王:oracle标量子查询和表连接改写

小鱼(邓秋爽) 云和恩墨专家,有超过5年超大型数据库专业服务经验,擅长oracle 数据库优化.SQL优化和troubleshooting 编辑手记:如何提高数据的查询效率是每个人都关注的问题,今天让我们来学习如何合理使用标量子查询和表连接方式来提高查询速度吧~ 之前小鱼就听过了标量子查询,不过对于其中的细节理解还是远远不够,借助一部分资料和自己测试对标量子查询做一点简单的分析和介绍. Oracle允许在select子句中包含单行子查询,这个也就是oracle的标量子查询,标量子查询有点类似于外

关于SQL子查询中使用order by的问题

问题描述 最近回头看以前的数据库教材<数据库系统概论>人大 王珊 版的有一段叙述:"需要特别指出的是,子查询的select语句不能使用 order by子句,order by子句只能对最终查询结果排序"但是正好之前练习碰到个场景,就在子句中用了order by ,结果也是正确的.所以我很疑惑,是书上说错了还是什么原因下面是SQLselect userid from (select userid,min(createtime) from LT_BIZORDER t where

怎样才能限制SQL Server只能让指定的机器连接(转)

server Q. How can I restrict access to my SQL Server so that it only allows certain machines to connect?(v1.0 19.10.1998) 怎样才能限制我的SQL Server只能让指定的机器连接 A. SQL Server has no built-in tools/facilities to do this. It also does not have the facility to ru

怎样才能限制SQL Server只能让指定的机器连接

server Q. How can I restrict access to my SQL Server so that it only allows certain machines to connect?(v1.0 19.10.1998) 怎样才能限制我的SQL Server只能让指定的机器连接 A. SQL Server has no built-in tools/facilities to do this. It also does not have the facility to ru

限制SQL Server只能让指定的机器连接

server Q. How can I restrict access to my SQL Server so that it only allows certain machines to connect?(v1.0 19.10.1998) 怎样才能限制我的SQL Server只能让指定的机器连接 A. SQL Server has no built-in tools/facilities to do this. It also does not have the facility to ru

怎么才能限制SQL Server只能让指定的机器连接_oracle

正在看的ORACLE教程是:怎么才能限制SQL Server只能让指定的机器连接. Q. How can I restrict access to my SQL Server so that it only allows certain machines to connect?(v1.0 19.10.1998) 怎样才能限制我的SQL Server只能让指定的机器连接 A. SQL Server has no built-in tools/facilities to do this. It al

Java执行sql语句并获取指定返回值

当我们插入一条数据的时候,我们很多时候都想立刻获取当前插入的主键值返回以做它用.我们通常的做法有如下几种: 1.先 select max(id) +1 ,然后将+1后的值作为主键插入数据库: 2.使用特定数据库的 auto_increment 特性,在插入数据完成后,使用 select max(id) 获取主键值: 3.对于Oracle,使用 sequence 获取值. 对于以上3种方法都无法绝对保证在高并发情况下的操作的原子性. 现记录以下几种获取数据库主键值方法: 1.数据库原生支持的sql