gpt4 book ai didi

sql - "Order By"使用参数作为列名

转载 作者:行者123 更新时间:2023-12-02 01:42:15 25 4
gpt4 key购买 nike

我们希望在使用 Visual Studio 数据集设计器创建的查询或存储过程的“Order By”子句中使用参数。

示例:

  FROM TableName
WHERE (Forename LIKE '%' + @SearchValue + '%') OR
(Surname LIKE '%' + @SearchValue + '%') OR
(@SearchValue = 'ALL')
ORDER BY @OrderByColumn

显示此错误:

Variables are only allowed when ordering by an expression referencing 
a column name.

最佳答案

你应该能够做这样的事情:

SELECT *
FROM
TableName
WHERE
(Forename LIKE '%' + @SearchValue + '%') OR
(Surname LIKE '%' + @SearchValue + '%') OR
(@SearchValue = 'ALL')
ORDER BY
CASE @OrderByColumn
WHEN 1 THEN Forename
WHEN 2 THEN Surname
END;
  • 将 1 分配给 @OrderByColumn 以按 Forename 排序。
  • 指定 2 以按姓氏排序。
  • 等等...您可以将此方案扩展到任意数量的列。
<小时/>

不过要注意性能。这些类型的构造可能会干扰查询优化器找到最佳执行计划的能力。例如,即使Forename被索引覆盖,查询可能仍然需要完整排序,而不是仅仅按顺序遍历索引。

如果是这种情况,并且您无法忍受性能影响,则可能需要为每个可能的排序顺序提供单独的查询版本,从而使客户端的事情变得相当复杂。

关于sql - "Order By"使用参数作为列名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13844678/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com