当前位置: 首页 > 面试题库 >

分页与存储过程

洪胤
2023-03-14
问题内容

我正在尝试添加分页存储过程的排序功能。

我该怎么做,到目前为止,我已经创建了这个。它工作正常,但是当传递@sort参数时,它不起作用。

ALTER PROCEDURE [dbo].[sp_Mk]
 @page INT,
 @size INT,
 @sort nvarchar(50) ,
 @totalrow INT  OUTPUT
AS
BEGIN
    DECLARE @offset INT
    DECLARE @newsize INT

    IF(@page=0)
    begin
       SET @offset = @page;
       SET @newsize = @size
    end
    ELSE 
    begin
        SET @offset = @page+1;
        SET @newsize = @size-1
    end
    -- SET NOCOUNT ON added to prevent extra result sets from
    SET NOCOUNT ON;
    WITH OrderedSet AS
    (
      SELECT *,
          ROW_NUMBER() OVER (ORDER BY @sort DESC) AS 'Index'
      FROM [dbo].[Mk]  
    )
   SELECT * 
   FROM OrderedSet 
   WHERE [Index] BETWEEN @offset AND (@offset + @newsize)

   SET @totalrow = (SELECT COUNT(*) FROM [dbo].[Mk])
END

问题答案:

一种方法(可能不是最好的方法)是使用动态SQL

CREATE PROCEDURE [sp_Mk]
 @page INT,
 @size INT,
 @sort nvarchar(50) ,
 @totalrow INT  OUTPUT
AS
BEGIN
    DECLARE @offset INT
    DECLARE @newsize INT
    DECLARE @sql NVARCHAR(MAX)

    IF(@page=0)
      BEGIN
        SET @offset = @page
        SET @newsize = @size
       END
    ELSE 
      BEGIN
        SET @offset = @page*@size
        SET @newsize = @size-1
      END
    SET NOCOUNT ON
    SET @sql = '
     WITH OrderedSet AS
    (
      SELECT *, ROW_NUMBER() OVER (ORDER BY ' + @sort + ') AS ''Index''
      FROM [dbo].[Mk] 
    )
   SELECT * FROM OrderedSet WHERE [Index] BETWEEN ' + CONVERT(NVARCHAR(12), @offset) + ' AND ' + CONVERT(NVARCHAR(12), (@offset + @newsize)) 
   EXECUTE (@sql)
   SET @totalrow = (SELECT COUNT(*) FROM [Mk])
END

这是 SQLFiddle 演示



 类似资料:
  • 本文向大家介绍SqlServer 2000、2005分页存储过程整理第1/3页,包括了SqlServer 2000、2005分页存储过程整理第1/3页的使用技巧和注意事项,需要的朋友参考一下 sql server 2005的分页存储过程分3个版本,一个是没有优化过的,一个是优化过的,最后一个支持join的,sql server 2000的分页存储过程,也可以运行在sql server 2005上,

  • 本文向大家介绍Jquery+Ajax+Json+存储过程实现高效分页,包括了Jquery+Ajax+Json+存储过程实现高效分页的使用技巧和注意事项,需要的朋友参考一下 之前在做分页时,很多朋友都是用Jquery分页插件,之前我就用的jquery.paper,有需要的朋友可以联系我,接下来小编给大家分享用Jquery+Ajax+Json+存储过程实现高效分页。 实现此功能用分页存储过程,pagi

  • 本文向大家介绍SQL Server 分页查询通用存储过程(只做分页查询用),包括了SQL Server 分页查询通用存储过程(只做分页查询用)的使用技巧和注意事项,需要的朋友参考一下 自开始做项目以来,一直在用。这段存储过程的的原创者(SORRY,忘记名字了),写得这段SQL代码很不错,我在这个基础上,按照我的习惯以及思维方式,调整了代码,只做分页查询用。 调用方法: prcPageResult

  • 本文向大家介绍ASP.NET存储过程实现分页效果(三层架构),包括了ASP.NET存储过程实现分页效果(三层架构)的使用技巧和注意事项,需要的朋友参考一下 本文实例为大家分享了ASP.NET存储过程实现分页的具体代码,供大家参考,具体内容如下 实现效果: 文本框内输入跳转的页数,点击GO会跳转到该页 首先在项目下加入BLL,DAL,DataAccess,MODEL类库 1、前台界面 2、后台代码

  • 问题内容: 我有一个应用程序,每小时执行约20000次DATA-OPERATIONS DATA- OPERATION总共具有30个参数(用于所有10个查询)。有些是文本,有些是数字。某些Text参数最长为10000个字符。 每个DATA-OPERATION都执行以下操作: 单个DATA-OPERATION,可在数据库中插入/更新多个表(约10个)。 对于每一次DATA-OPERATION,我都会建

  • 本文向大家介绍C#基于数据库存储过程的AJAX分页实例,包括了C#基于数据库存储过程的AJAX分页实例的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了C#基于数据库存储过程的AJAX分页实现方法。分享给大家供大家参考。具体如下: 首先我们在数据库(SQL Server)中声明定义存储过程 因为是直接访问数据库的,所以我们将下面这条方法写入到DAL层中,这里我将它写入到SqlHelper中