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

本文主要是介绍问题解决:除非另外还指定了 TOP 或 FOR XML,否则,ORDER BY 子句在视图、内联函数、派生表、子查询和公用表表达式中无效,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录

  • 问题场景
  • 问题环境
  • 问题原因
  • 解决方案
  • 结果
  • 总结
  • 随缘求赞

问题场景

因为项目需要,需要在公共框架里面引入sqlserver方言类。而在实现sqlserver方言类之后,调用方言类的方法的时候,发现一个错误
在这里插入图片描述
错误提示如下:

>[错误] 脚本行:1-10 --------------------------------------Id 1033, Level 15, State 1, Line 10除非另外还指定了 TOP 或 FOR XML,否则,ORDER BY 子句在视图、内联函数、派生表、子查询和公用表表达式中无效。消息: 1033, 级别: 15, 状态: 1, 过程: , 行: 10 

运行的SQL如下:

SELECT COUNT(*) 
FROM (	SELECT wf.S_VER        AS "S_VER"FROM (	SELECT DISTINCT(S_VER)FROM testWHERE  1=1  AND I_COMMON = 1 ) AS wf ORDER BYwf.S_VER ASC
)  a

问题环境

软件版本
SqlServer2008

问题原因

从问题的提示,我们可以看出,我们执行的SQL内部含有order by关键字,而且是在子查询等情况使用了该关键字,导致了数据库引擎认为该SQL有问题,所以报错了。
在这里插入图片描述

解决方案

在这里插入图片描述
这个时候,我们可以使用top关键字来规避这个问题。而top关键字有两种方法使用:

  1. 指定具体数目
    我们可以用具体的数字里进行限量获取,这个和mysqllimit关键字有点像。这里用一个sql来展示从表中获取第20个之后的10个数据:

    SELECT  TOP  10 * 
    FROM  test2
    WHERE  id NOT IN( SELECT top  20 id FROM  test2 )
    
  2. 指定具体百分比
    如果我们的sql需要获取全部数据来做过滤,又不知道具体的数目,这个时候就可以用百分比来进行获取,其表达形式为TOP N percentN为百分比数目,百分比值必须介于 0 到 100 之间,不然会报错。像我们文章开头说的问题SQL,就需要使用这个,经过修正之后,SQL如下:

    SELECT COUNT(*) 
    FROM (	SELECT  top 100 percent wf.S_VER        AS "S_VER"FROM (	SELECT DISTINCT(S_VER)FROM DWF_DE_WF WHERE  1=1  AND I_COMMON = 1 ) AS wf ORDER BYwf.S_VER ASC
    )  a
    

结果

经过修正之后,sql执行结果如下:

>[SQL] 脚本行:1-10 -------------------------------------SELECT COUNT(*) FROM (	SELECT  top 100 percent wf.S_VER        AS "S_VER"FROM (	SELECT DISTINCT(S_VER)FROM DWF_DE_WF WHERE  1=1  AND I_COMMON = 1 ) AS wf ORDER BYwf.S_VER ASC)  a column1    ---------- 14         已选定 1 条记录 [抓取元数据:0ms] [抓取数据:0ms] [已执行:2020-6-9 下午1:35:03] [执行:4ms] 

在这里插入图片描述

总结

这个是sqlserver的小知识点,主要是通过这个问题,引出对top关键字的使用。
在这里插入图片描述

随缘求赞

如果我的文章对大家产生了帮忙,可以在文章底部点个赞或者收藏;
如果有好的讨论,可以留言;
如果想继续查看我以后的文章,可以点击关注
可以扫描以下二维码,关注我的公众号:枫夜之求索阁,查看我最新的分享!
在这里插入图片描述
拜拜

这篇关于问题解决:除非另外还指定了 TOP 或 FOR XML,否则,ORDER BY 子句在视图、内联函数、派生表、子查询和公用表表达式中无效的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1114809

相关文章

Nginx错误拦截转发 error_page的问题解决

《Nginx错误拦截转发error_page的问题解决》Nginx通过配置错误页面和请求处理机制,可以在请求失败时展示自定义错误页面,提升用户体验,下面就来介绍一下Nginx错误拦截转发error_... 目录1. 准备自定义错误页面2. 配置 Nginx 错误页面基础配置示例:3. 关键配置说明4. 生效

Java调用DeepSeek API的8个高频坑与解决方法

《Java调用DeepSeekAPI的8个高频坑与解决方法》现在大模型开发特别火,DeepSeek因为中文理解好、反应快、还便宜,不少Java开发者都用它,本文整理了最常踩的8个坑,希望对... 目录引言一、坑 1:Token 过期未处理,鉴权异常引发服务中断问题本质典型错误代码解决方案:实现 Token

springboot3.x使用@NacosValue无法获取配置信息的解决过程

《springboot3.x使用@NacosValue无法获取配置信息的解决过程》在SpringBoot3.x中升级Nacos依赖后,使用@NacosValue无法动态获取配置,通过引入SpringC... 目录一、python问题描述二、解决方案总结一、问题描述springboot从2android.x

Python容器转换与共有函数举例详解

《Python容器转换与共有函数举例详解》Python容器是Python编程语言中非常基础且重要的概念,它们提供了数据的存储和组织方式,下面:本文主要介绍Python容器转换与共有函数的相关资料,... 目录python容器转换与共有函数详解一、容器类型概览二、容器类型转换1. 基本容器转换2. 高级转换示

MySQL中between and的基本用法、范围查询示例详解

《MySQL中betweenand的基本用法、范围查询示例详解》BETWEENAND操作符在MySQL中用于选择在两个值之间的数据,包括边界值,它支持数值和日期类型,示例展示了如何使用BETWEEN... 目录一、between and语法二、使用示例2.1、betwphpeen and数值查询2.2、be

Springboot3统一返回类设计全过程(从问题到实现)

《Springboot3统一返回类设计全过程(从问题到实现)》文章介绍了如何在SpringBoot3中设计一个统一返回类,以实现前后端接口返回格式的一致性,该类包含状态码、描述信息、业务数据和时间戳,... 目录Spring Boot 3 统一返回类设计:从问题到实现一、核心需求:统一返回类要解决什么问题?

springboot中配置logback-spring.xml的方法

《springboot中配置logback-spring.xml的方法》文章介绍了如何在SpringBoot项目中配置logback-spring.xml文件来进行日志管理,包括如何定义日志输出方式、... 目录一、在src/main/resources目录下,也就是在classpath路径下创建logba

解决idea启动项目报错java: OutOfMemoryError: insufficient memory

《解决idea启动项目报错java:OutOfMemoryError:insufficientmemory》:本文主要介绍解决idea启动项目报错java:OutOfMemoryError... 目录原因:解决:总结 原因:在Java中遇到OutOfMemoryError: insufficient me

maven异常Invalid bound statement(not found)的问题解决

《maven异常Invalidboundstatement(notfound)的问题解决》本文详细介绍了Maven项目中常见的Invalidboundstatement异常及其解决方案,文中通过... 目录Maven异常:Invalid bound statement (not found) 详解问题描述可

idea粘贴空格时显示NBSP的问题及解决方案

《idea粘贴空格时显示NBSP的问题及解决方案》在IDEA中粘贴代码时出现大量空格占位符NBSP,可以通过取消勾选AdvancedSettings中的相应选项来解决... 目录1、背景介绍2、解决办法3、处理完成总结1、背景介绍python在idehttp://www.chinasem.cna粘贴代码,出