Все ветви выражения case
будут преобразованы в тип данных ветви с наивысшим приоритетом .
datetime
имеет более высокий приоритет, чем varchar
, поэтому он попытается привести AccessionNumber
значения к datetime
. Вы можете использовать явное приведение к sql_variant
, как показано ниже.
CASE @SortBy
WHEN 'AccessionNumber' THEN cast([AccessionNumber] as sql_variant)
WHEN 'CreatedDate' THEN CreatedDate
END
Вы должны знать, что такого рода условие динамической сортировки не будет использовать индекс, чтобы избежать сортировки.