我正在研究这个例子。
http://www.drury.net.nz/2005/04/15/specifying-a-sort-parameter-for-a-tsql-stored-procedure/
CREATE PROCEDURE getEmployees ( @ColumnName varchar(100) )
AS
SELECT
EmployeeID,
FirstName,
LastName,
SSN,
Salary
FROM
Employees
ORDER BY
CASE
WHEN @ColumnName=’LastName’ THEN LastName
WHEN @ColumnName=’Salary’ THEN CONVERT(varchar(50), Salary)
WHEN @ColumnName=’SSN’ THEN SSN
END
case 语句有效,但如果我有以下参数怎么办:@SortColumn、@SortDirection。
@SortColumn 可以是任何类型的任何列,它似乎使用 case 语句,您必须将值转换为相同类型。我想我可以将它们全部设为 VARCHAR,并确保像 DateTime 这样的值按照正确的顺序放置,以便按照我想要的方式进行排序。
但是如果我将 @SortDirection 参数设置为 ASC 或 DESC 作为 VARCHAR 值怎么办?如何调整查询来更改排序方向?
最佳答案
如果你不想使用动态 SQL,那么你可以通过使用 case 语句来实现 where 子句的非过滤部分;但这不会很快。您还需要注意案例部分中的类型是否匹配。
SELECT
*
FROM
dbo.Contacts
ORDER BY
CASE @Sort
WHEN 1 THEN Surname
WHEN 2 THEN Forename
WHEN 3 THEN Telephone_Number
ELSE ''
END ASC
,
CASE @Sort
WHEN 4 THEN Personnel_Ref
WHEN 5 THEN timesheet_number
WHEN 6 THEN Telephone_Number
ELSE ''
END DESC
关于sql - 如何运行查询以使用参数按列和升序/降序排序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/795706/