Для запроса номер 1 вы не можете указать столбец, который хотите упорядочить, динамически, как вы пытаетесь это сделать. Однако вы можете построить строку SQL и выполнить ее, используя EXEC:
declare @OrderBy varchar(100) = 'CompanyName'
declare @SortingOrder varchar(5) = 'desc'
declare @sql varchar(1000)
SET @sql = 'Select * from [User] order by ' + @OrderBy + ' ' + @SortingOrder
EXEC(@sql)
Или, если вы хотите избежать динамического SQL, вы можете использовать оператор CASE WHEN в своем ORDER BY:
declare @OrderBy varchar(100) = 'CompanyName'
declare @so varchar(5) = 'desc'
SELECT * FROM [User]
ORDER BY
CASE WHEN @OrderBy = 'CompanyName' AND @so = 'desc' THEN CompanyName END DESC,
CASE WHEN @OrderBy = 'CompanyName' AND @so <> 'desc' THEN CompanyName END