выполнение запроса - PullRequest
0 голосов
/ 04 мая 2011

1)

declare @OrderBy varchar(100) = 'CompanyName'
declare @SortingOrder varchar(5) = 'desc'

Select * from [User] order by (@OrderBy + '  ' + @SortingOrder)

2)

Select * from [User] order by CompanyName desc

Если я использую второй запрос, то результат сбывается (как я и ожидал), но если я использую первый запрос, торезультат не такой, как ожидалось.

Я имею в виду, что набор результатов отображается путем упорядочения названия компании в порядке убывания.

Что не так в 1-м запросе?Кто-то, пожалуйста, объясните это.

спасибо.

1 Ответ

1 голос
/ 04 мая 2011

Для запроса номер 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...