Ich habe den folgenden SP, den ich verwende, um eine Liste von Nachrichtenartikeln zu paginieren. Wie Sie vielleicht erraten können, ist @count
die Anzahl der Zeilen, die zurückgegeben werden, @start
ist der Index zum Auswählen von Zeilen aus (sortiert nach innerer Abfrage), @orderby
gibt die zu sortierende Spalte an, und @orderdir
gibt an, ob eine Richtung oder die andere. Meine ursprüngliche Abfrage war here, bevor ich den Parameter @orderdir
hinzugefügt habe.DESC und ASC als Parameter in der gespeicherten Prozedur
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
Jetzt geht eigentlich nichts falsch, aber die @orderby
Parameter funktionieren nicht. Wenn 1 als @orderdir
Parameter angegeben wird, gibt es mir genau die gleichen Ergebnisse, als ob ich 2 als diesen Parameter bereitstellen würde.
Yup, das genau funktioniert, wie ich wollte, es scheint so offensichtlich, jetzt, wo du es niedergeschrieben hast. Danke, warten müssen, um dies als die Antwort zu markieren. –
Kein Schweiß. Ich habe mir ein paar Mal zuvor den Kopf über dieses Zeug gekratzt, als Row Number herauskam. – Gats