Ho il seguente SP che sto usando per impaginare un elenco di articoli di notizie. Come potresti essere in grado di indovinare, @count
è il numero di righe da restituire, @start
è l'indice per selezionare le righe da (ordinate per query interna), @orderby
indica la colonna da ordinare e @orderdir
indica se ordinare una direzione o il altro. La mia query originale era here, prima di aggiungere il parametro @orderdir
.DESC e ASC come parametro nella stored procedure
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
Ora, nulla in realtà va male, ma il parametro @orderby
non funziona. Se fornisci 1 come parametro @orderdir
, mi darà esattamente gli stessi risultati come se fornissi 2 come parametro.
Yup che ha funzionato esattamente come volevo, mi sembra così ovvio ora che l'hai scritto. Grazie, devo aspettare per segnare questo come risposta. –
Nessun problema. Mi sono grattato la testa un po 'di volte prima che uscisse row_number. – Gats