Mam następujące SP, które używam do paginacji listy artykułów z wiadomościami. Jak możesz być w stanie odgadnąć, @count
to liczba wierszy do zwrócenia, @start
jest indeksem do wybrania wierszy od (posortowane według zapytania wewnętrznego), @orderby
wskazuje kolumnę do posortowania według, a @orderdir
wskazuje czy sortować jeden kierunek czy inny. Moje pierwotne zapytanie to here, zanim dodałem parametr @orderdir
.DESC i ASC jako parametr w procedurze przechowywanej
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
Teraz nic się nie dzieje, ale parametr @orderby
nie działa. Jeśli podasz 1 jako parametr @orderdir
, otrzymam dokładnie takie same wyniki, jak gdybym podał 2 jako ten parametr.
yup, który działał dokładnie tak, jak chciałem, wydaje się więc oczywiste, teraz, kiedy to zapisałeś. Dzięki, musicie poczekać, aby oznaczyć to jako odpowiedź. –
Bez potu. Podrapałam się w głowę nad tym materiałem kilka razy, zanim pojawił się numer_wiersza. – Gats