如何解决DESC和ASC作为存储过程中的参数
行号不会在每一行上求值,但是case语句是有效的,因此无论大小写如何,您都被行号所困扰。
尝试以下方法:
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
)
解决方法
我使用以下SP来对新闻文章列表进行分页。您可能会猜到,@count
是要返回的行数,@start
是从中选择行的索引(按内部查询排序),@orderby
指示要排序的列,并@orderdir
指示是否对一个方向或另一个方向进行排序。在添加参数之前,我的原始查询在
这里@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作为该参数完全相同的结果。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。