如何在启用分页的查询中通过变量传递Order By @col name

Abh*_*bhi 1 .net sql t-sql sql-server paging

以下是一个启用分页的SQL服务器查询,它运行良好,没有@pOrderBy变量的动态顺序.

我想在这个查询中实现两件事.

  1. 我想根据传递的列名对行进行排序.
  2. 我想在其中运行另一个查询来获取总行数,以便我可以在我的UI上显示页数.

    ALTER PROCEDURE [dbo].[usp_get_all_groups] 
      -- Add the parameters for the stored procedure here
      @pStartIndex smallint,
      @pPageSize tinyint,
      @pOrderBy varchar(20)
    AS
    BEGIN
      -- SET NOCOUNT ON added to prevent extra result sets from
      -- interfering with SELECT statements.
      SET NOCOUNT ON;
    
     SELECT       GroupTable._id,
                  GroupTable.GroupCode,
                  GroupTable.Type,
                  GroupTable.Description
        From(
        Select ROW_NUMBER() OVER (
           ORDER BY UG._id,
                UG.GroupCode,
                UG.Type,
                UG.Description ) as [Row_Number],
                UG._id,
                UG.GroupCode,
                UG.Type,
                UG.Description
       From UserGroups as UG
       ) as GroupTable
       where GroupTable.[Row_Number] BETWEEN @pStartIndex AND @pStartIndex + @pPageSize             
       ORDER BY GroupTable.[Row_Number]
    
    END
    
    Run Code Online (Sandbox Code Playgroud)

Ode*_*ded 5

我想根据传递的列名对行进行排序.

您将需要使用动态SQL - 在常规查询中不可能在变量中使用列名.

另一种方法是CASEORDER BY子句中使用- 检查变量的值并使用相应的列.请参阅@Dems的评论.

我想在其中运行另一个查询来获取总行数,以便我可以在我的UI上显示页数.

使用输出参数或返回值,并在此存储过程中为其分配此类查询的值.