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
如果我使用第二个查询,那么结果将成为现实(如我所料),但如果我使用第一个查询,则结果不符合预期。
我的意思是通过按降序排序公司名称来显示结果集。
第一次查询有什么问题? 有人请解释一下。
感谢。
答案 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