DESC 和 ASC 作为存储过程中的参数

2023-11-23

我有以下 SP,用于对新闻文章列表进行分页。正如你可能猜到的那样,@count是要返回的行数,@start是从中选择行的索引(按内部查询排序),@orderby指示排序依据的列,并且@orderdir指示是否对一个方向或另一个方向进行排序。我原来的查询是here,在我添加之前@orderdir范围。

ALTER PROCEDURE [mytable].[news_editor_paginate]
    @count int,
    @start int,
    @orderby int,
    @orderdir int
AS 
BEGIN
    SET NOCOUNT ON; 
    SELECT TOP (@count) * FROM 
    (  
        SELECT ne.*,n.publishstate, 
            (CASE WHEN @orderdir = 1 THEN
                ROW_NUMBER() OVER (
                    ORDER BY                    
                        CASE WHEN @orderby = 0 THEN ne.[time] END DESC,
                        CASE WHEN @orderby = 1 THEN ne.lastedit END DESC,    
                        CASE WHEN @orderby = 2 THEN ne.title END ASC
                    )
            WHEN @orderdir = 2 THEN
                ROW_NUMBER() OVER (
                    ORDER BY                    
                        CASE WHEN @orderby = 0 THEN ne.[time] END ASC,    
                        CASE WHEN @orderby = 1 THEN ne.lastedit END ASC,
                        CASE WHEN @orderby = 2 THEN ne.title END DESC
                    )
                END
            ) AS num
            FROM news_edits AS ne
            LEFT OUTER JOIN news AS n
            ON n.editid = ne.id 
        ) 
     AS a
    WHERE num > @start
END

现在实际上没有什么问题,但是@orderby参数不起作用。如果提供 1 作为@orderdir参数,它会给我完全相同的结果,就像我提供 2 作为该参数一样。


行号不会对每一行进行计算,但是 case 语句会计算行号,因此无论情况如何,您都只能使用 rownum。

试试这个:

            ROW_NUMBER() OVER (
                ORDER BY                    
                    CASE WHEN @orderby = 0 AND @orderdir = 1 THEN ne.[time] END DESC,    
                    CASE WHEN @orderby = 0 AND @orderdir = 2 THEN ne.[time] END ASC,    
                    CASE WHEN @orderby = 1 AND @orderdir = 1 THEN ne.lastedit END DESC,
                    CASE WHEN @orderby = 1 AND @orderdir = 2 THEN ne.lastedit END ASC,
                    CASE WHEN @orderby = 2 AND @orderdir = 1 THEN ne.title END ASC
                    CASE WHEN @orderby = 2 AND @orderdir = 2 THEN ne.title END DESC
                )
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

DESC 和 ASC 作为存储过程中的参数 的相关文章

随机推荐

  • 带 Bootstrap + LESS Mixins 的语义网格如何实现?

    Twitter bootstrap 文档讨论了生成网格系统的三个 mixin container fixed grid gt core grid gt fluid 我知道如何设置页面以使用引导程序 但我不知道如何在语义上使用网格系统 该文档
  • 如何在java中使用apache poi中的rowiterator?

    我尝试在java中使用apache poi读取excel文件 但是 Eclipse没有编译代码 public class ReadExcel public static void main String args throws IOExce
  • 如何获取所有EJB定时器?

    在 EJB 3 1 中 我可以在为特定 bean 获取的 TimerService 实例上使用 TimerService getTimers 来获取该 bean 的所有计时器 然而 我真正需要的是这个的系统范围版本 IE 我想要 EJB 容
  • 在同一窗口中绘制多种类型的图(线图、散点图、条形图等)

    我试图在同一窗口中绘制两种类型的图 即线图和散点图 折线图 第一幅图 中绘制的数据是代表气候指数 Y 与小数年 X 的浮动数值 我希望成为 散点图 的第二个图大致相同 但浮动数值代表河流流量 Y 与十进制年份 X 我尝试通过使用双 x 轴和
  • 如何在我的 iPhone 应用程序中通过 fbconnect 获取用户的 Facebook 个人资料图片? [复制]

    这个问题在这里已经有答案了 可能的重复 通过 iOS 获取 Facebook 图片时出现问题 如何在我的 iPhone 应用程序中通过 fbconnect 获取用户的 Facebook 个人资料图片 尝试更深入地了解http develop
  • NestedScrollView 内的 MapView 不滚动

    像这样在 xml 中膨胀我的 Mapview
  • 如何使用 spring security 2.0 在我的 JSP 页面中显示错误消息

    嗨 我现在正在使用 Spring Security 效果很好 但如果登录失败 则不会显示错误消息 我想知道如何显示错误消息 我已经在 applicationContext xml 中配置了 ResourceBundleMessageSour
  • 子流程变量[重复]

    这个问题在这里已经有答案了 1 import subprocess 2 raw raw input Filename lower 3 ip raw input Host lower 4 cmd subprocess call tcpdump
  • .css() 延迟后不会应用

    我想使用 jQuery 动态更改 div 上的背景颜色css 它起作用了 但后来我尝试添加一些延迟 但由于某种原因它停止了工作 我缺少什么 这是它的 MVC HTML div div div div JS nodelay hover fun
  • C# 和 VBA 之间的通信

    应老板的要求 我创建了一小组脚本 用于定期监视某些设备和进程的状态 随后使用相对复杂的 VBA 模块处理该信息 该模块收集所有信息 应用公式 设置范围并生成图表等 但存在两个问题 我是一名业余程序员 所以我的 VBA 例程效率很低 这对我来
  • SSH 会话中 TMUX 内的系统剪贴板 Vim

    我在 ssh 会话中的 tmux 中打开了 vim 如何让 vim 使用笔记本电脑的系统剪贴板作为默认复制粘贴 默认set clipboard unamed不工作 以防万一 两个系统都是 Ubuntu 如果您的终端仿真器支持 剪贴板集成功能
  • 迅速。结合。有没有办法在重试时多次调用发布者块?

    当发生某些错误时 我想使用 Swift Combine 中的 retry 多次发出网络请求 发布者内部的块仅被调用一次 这意味着当错误发生时 对真实应用程序仅发出一个请求 我的代码是 import UIKit import Combine
  • 如何将 crdate 和 cruuser_id 等标准字段与 TYPO3 和 extbase 一起使用?

    我有领域模型篮子和文章 如果我调用以下命令 我会收到购物篮中的文章 articlesInBasket basket gt getArticles 如何使用 TYPO3 标准属性 如 crdate 和 cruuser id 使用这样的东西会很
  • 将 @Autowired 与 AspectJ 和 Spring Boot 一起使用

    我想在 方面 中使用 Autowired 注释 我想在我的方面注入一个存储库 但是当我尝试调用自动装配类的方法时 会发生 NullPointException Aspect public class AspectSecurity Autow
  • 如何从MKmapview的可见区域获取半径?

    我能够获得地图视图的可见矩形 并且地图视图的中心点和跨度增量也可以从 mkmaap 视图方法获得 可见的是 mapView visibleMapRect用来 获取中心点 map view centerCoordinate使用并获得跨度 ma
  • 编写 std::copysign 的可移植 SSE/AVX 版本

    我目前正在使用 SSE 和 AVX 内在函数编写 QR 分解 线性系统求解器 的矢量化版本 其中一个子步骤需要选择与另一个值相反 等于的值的符号 在串行版本中 我为此使用了 std copysign 现在我想为 SSE AVX 寄存器创建一
  • data.table 按组外连接

    我正在尝试使用 data table 来填充我拥有的大型不平衡多维面板中缺失的观察结果 以下是数据示例 其中包含一些关于我想要的内容的评论 mydat lt structure list fund c 1 1 1 1 2 2 2 3 3 h
  • jquery.post 和 jquery.get 之间的区别?

    这两个 AJAX 调用有什么区别 为什么在使用 asp net mvc 框架时我会选择使用其中一个 一种使用 POST 一种使用 GET 就它们的用途而言 唯一真正的技术差异 如果我错了 请更正这篇文章 是 GET 对查询字符串的限制要短得
  • 找到覆盖整组区间的最少点数? [复制]

    这个问题在这里已经有答案了 给定一组区间 x y where 0 lt x y lt 2000如何找到可以覆盖所有间隔的最小点数 即每个间隔应包含结果点集中至少一个点 example Given Set of intervals 2 5 3
  • DESC 和 ASC 作为存储过程中的参数

    我有以下 SP 用于对新闻文章列表进行分页 正如你可能猜到的那样 count是要返回的行数 start是从中选择行的索引 按内部查询排序 orderby指示排序依据的列 并且 orderdir指示是否对一个方向或另一个方向进行排序 我原来的