Вы можете упростить CASE, используя ROW_NUMBER, который сортирует ваши данные и эффективно конвертирует их в удобный целочисленный формат. Тем более что вопрос помечен SQL Server 2005
Это также расширяется достаточно легко, чтобы иметь дело с вторичными и третичными сортами
Я использовал множитель, чтобы снова упростить фактический оператор выбора и уменьшить вероятность оценки RBAR в ORDER BY
DECLARE @multiplier int;
SELECT @multiplier = CASE @Direction WHEN 1 THEN -1 ELSE 1 END;
SELECT
Columns you actually want
FROM
(
SELECT
Columns you actually want,
ROW_NUMBER() OVER (ORDER BY AddedDate) AS AddedDateSort,
ROW_NUMBER() OVER (ORDER BY Visible) AS VisibleSort,
ROW_NUMBER() OVER (ORDER BY AddedBy) AS AddedBySort,
ROW_NUMBER() OVER (ORDER BY Title) AS TitleSort
FROM
myTable
WHERE
MyFilters...
) foo
ORDER BY
CASE @OrderByColumn
WHEN 'AddedDate' THEN AddedDateSort
WHEN 'Visible' THEN VisibleSort
WHEN 'AddedBy' THEN AddedBySort
WHEN 'Title' THEN TitleSort
END * @multiplier;