查询执行

时间:2011-05-04 05:22:25

标签: sql-server-2008

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 个答案:

答案 0 :(得分:1)

对于查询编号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,可以在ORDER BY中使用CASE WHEN语句:

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