存储过程中可选的 Order By?

CSh*_*Dev 1 sql-server stored-procedures sql-order-by

我有一个有点复杂的存储过程。我想让用户能够选择要排序的列。他们应该能够根据需要选择任意数量的列。

有没有办法在存储过程中实现这一点?如何将列名称传递到过程中,然后将这些名称反映到 order by 子句中?请注意,列的数量是可变的。

我了解如何传递参数,只是不知道这是否可以在存储过程中动态构建 order by 子句

Jac*_*son 5

您可以动态组装 SQL 并使用 执行它sp_executesql。但是,这会损失一些使用非动态参数化存储过程所获得的性能和安全性收益。

如果可能的 ORDER BY 列是有限列表,则可以在 ORDER BY 子句中使用 CASE WHEN 来根据传入参数更改排序。例如,如果您传入了一个名为 @order_column 的参数,您可以这样做

ORDER BY
CASE WHEN @order_column='ColumnA'
THEN ColumnA END
CASE WHEN @order_column='ColumnB'
THEN ColumnB END
Run Code Online (Sandbox Code Playgroud)