I writing a SP that accepts as parameters column to sort and direction.
I don’t want to use dynamic SQL.
The problem is with setting the direction parameter.
This is the partial code:
SET @OrderByColumn = 'AddedDate' SET @OrderDirection = 1; … ORDER BY CASE WHEN @OrderByColumn = 'AddedDate' THEN CONVERT(varchar(50), AddedDate) WHEN @OrderByColumn = 'Visible' THEN CONVERT(varchar(2), Visible) WHEN @OrderByColumn = 'AddedBy' THEN AddedBy WHEN @OrderByColumn = 'Title' THEN Title END
Advertisement
Answer
You could have two near-identical ORDER BY
items, one ASC
and one DESC
, and extend your CASE
statement to make one or other of them always equal a single value:
ORDER BY CASE WHEN @OrderDirection = 0 THEN 1 ELSE CASE WHEN @OrderByColumn = 'AddedDate' THEN CONVERT(varchar(50), AddedDate) WHEN @OrderByColumn = 'Visible' THEN CONVERT(varchar(2), Visible) WHEN @OrderByColumn = 'AddedBy' THEN AddedBy WHEN @OrderByColumn = 'Title' THEN Title END END ASC, CASE WHEN @OrderDirection = 1 THEN 1 ELSE CASE WHEN @OrderByColumn = 'AddedDate' THEN CONVERT(varchar(50), AddedDate) WHEN @OrderByColumn = 'Visible' THEN CONVERT(varchar(2), Visible) WHEN @OrderByColumn = 'AddedBy' THEN AddedBy WHEN @OrderByColumn = 'Title' THEN Title END END DESC