问题解决:除非另外还指定了 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

相关文章

Java中读取YAML文件配置信息常见问题及解决方法

《Java中读取YAML文件配置信息常见问题及解决方法》:本文主要介绍Java中读取YAML文件配置信息常见问题及解决方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要... 目录1 使用Spring Boot的@ConfigurationProperties2. 使用@Valu

MySQL 中的 CAST 函数详解及常见用法

《MySQL中的CAST函数详解及常见用法》CAST函数是MySQL中用于数据类型转换的重要函数,它允许你将一个值从一种数据类型转换为另一种数据类型,本文给大家介绍MySQL中的CAST... 目录mysql 中的 CAST 函数详解一、基本语法二、支持的数据类型三、常见用法示例1. 字符串转数字2. 数字

SQL Server配置管理器无法打开的四种解决方法

《SQLServer配置管理器无法打开的四种解决方法》本文总结了SQLServer配置管理器无法打开的四种解决方法,文中通过图文示例介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的... 目录方法一:桌面图标进入方法二:运行窗口进入检查版本号对照表php方法三:查找文件路径方法四:检查 S

Python内置函数之classmethod函数使用详解

《Python内置函数之classmethod函数使用详解》:本文主要介绍Python内置函数之classmethod函数使用方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地... 目录1. 类方法定义与基本语法2. 类方法 vs 实例方法 vs 静态方法3. 核心特性与用法(1编程客

从入门到精通MySQL联合查询

《从入门到精通MySQL联合查询》:本文主要介绍从入门到精通MySQL联合查询,本文通过实例代码给大家介绍的非常详细,需要的朋友可以参考下... 目录摘要1. 多表联合查询时mysql内部原理2. 内连接3. 外连接4. 自连接5. 子查询6. 合并查询7. 插入查询结果摘要前面我们学习了数据库设计时要满

Python函数作用域示例详解

《Python函数作用域示例详解》本文介绍了Python中的LEGB作用域规则,详细解析了变量查找的四个层级,通过具体代码示例,展示了各层级的变量访问规则和特性,对python函数作用域相关知识感兴趣... 目录一、LEGB 规则二、作用域实例2.1 局部作用域(Local)2.2 闭包作用域(Enclos

怎样通过分析GC日志来定位Java进程的内存问题

《怎样通过分析GC日志来定位Java进程的内存问题》:本文主要介绍怎样通过分析GC日志来定位Java进程的内存问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、GC 日志基础配置1. 启用详细 GC 日志2. 不同收集器的日志格式二、关键指标与分析维度1.

MySQL查询JSON数组字段包含特定字符串的方法

《MySQL查询JSON数组字段包含特定字符串的方法》在MySQL数据库中,当某个字段存储的是JSON数组,需要查询数组中包含特定字符串的记录时传统的LIKE语句无法直接使用,下面小编就为大家介绍两种... 目录问题背景解决方案对比1. 精确匹配方案(推荐)2. 模糊匹配方案参数化查询示例使用场景建议性能优

Java 线程安全与 volatile与单例模式问题及解决方案

《Java线程安全与volatile与单例模式问题及解决方案》文章主要讲解线程安全问题的五个成因(调度随机、变量修改、非原子操作、内存可见性、指令重排序)及解决方案,强调使用volatile关键字... 目录什么是线程安全线程安全问题的产生与解决方案线程的调度是随机的多个线程对同一个变量进行修改线程的修改操

mysql表操作与查询功能详解

《mysql表操作与查询功能详解》本文系统讲解MySQL表操作与查询,涵盖创建、修改、复制表语法,基本查询结构及WHERE、GROUPBY等子句,本文结合实例代码给大家介绍的非常详细,感兴趣的朋友跟随... 目录01.表的操作1.1表操作概览1.2创建表1.3修改表1.4复制表02.基本查询操作2.1 SE