sql - 如何运行查询以使用参数按列和升序/降序排序?

标签 sql sql-server t-sql

我正在研究这个例子。

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/

相关文章:

SQL Server - 使用 IN 比较 Varchar 值

sql-server - 计算发货时间超过 X 天的订单百分比的更好方法?

sql - 尝试从两个 PostgreSQL 数据库导入数据库时​​出现语法错误

sql - 如何选择表中不存在的列并为返回的所有行返回 NULL 结果

c# - 使用 Entity Framework 在数据表中不返回任何值的过程

java - 如何在 java eclipse 中刷新 JTable 后从 JTABLE 获取值并将其传递给文本字段

php - 带有 SET 变量语句的 Mysqli 查询(即多个查询)

php - php-仅从foreach循环中回显一个类别

sql - 有关与 SQL Server 2008 一起使用的 SQL 的良好引用

Azure Synapse SQL 池未使用 OPENROWSET 识别 csv header