передать в @OrderBy int, где положительным является ASC, отрицательным является DESC, фактическим числом является столбец для сортировки по
SELECT
dt.yourColumn1
,dt.yourColumn2
,dt.yourColumn3
,CASE
WHEN @OrderBy>0 THEN dt.SortBy
ELSE NULL
END AS SortByAsc
,CASE
WHEN @OrderBy<0 THEN dt.SortBy
ELSE NULL
END AS SortByDesc
FROM (SELECT
yourColumn1
,yourColumn2
,yourColumn3
,CASE
WHEN ABS(@OrderBy) = 1 THEN surname
WHEN ABS(@OrderBy) = 2 THEN forename
WHEN ABS(@OrderBy) = 3 THEN fullName
WHEN ABS(@OrderBy) = 4 THEN CONVERT(varchar(10),userId)
WHEN ABS(@OrderBy) = 5 THEN CONVERT(varchar(10),MobileNumber
WHEN ABS(@OrderBy) = 6 THEN DeviceStatus
WHEN ABS(@OrderBy) = 7 THEN LastPosition
WHEN ABS(@OrderBy) = 8 THEN CONVERT(varchar(23),LastAlert,121)
WHEN ABS(@OrderBy) = 9 THEN CONVERT(varchar(23),LastCommunication,121)
WHEN ABS(@OrderBy) =10 THEN CONVERT(varchar(23),LastPreAlert,121)
ELSE NULL
END AS SortBy
FROM YourTablesHere
WHERE X=Y
) dt
ORDER BY SortByAsc ASC, SortByDesc DESC
просто убедитесь, что вы строите строку, которая сортируется правильно, обратите внимание, что я использовал «YYYY-MM-DD чч: мм: сс.ммм» для дат и поместил числа в строки. Обычно мы собираем несколько столбцов вместе, поэтому, если вы сортируете по фамилии, также используется имя и т. Д. Будьте внимательны, если вы объедините несколько столбцов, вам нужно дополнить нулями или пробелами.
Если вы не хотите, чтобы столбцы SortByAsc и SortByDesc были в наборе результатов, оберните все это в производную таблицу.