zoukankan      html  css  js  c++  java
  • SQL Server分页存储过程

      1 CREATE PROCEDURE [dbo].[Pro_GetPageData]
      2 
      3 (
      4 
      5     @TableName        nvarchar(3000),            -- 表名
      6 
      7     @ReturnFields    nvarchar(3000) = '*',    -- 需要返回的列 
      8 
      9     @PageSize        int = 10,                -- 每页记录数
     10 
     11     @PageIndex        int = 0,                -- 当前页码
     12 
     13     @Where            nvarchar(3000) = '',        -- 查询条件
     14 
     15     @OrderBy        nvarchar(200),            -- 排序字段名 最好为唯一主键
     16 
     17     @OrderType        int = 1                    -- 排序类型 1:降序 其它为升序
     18 
     19 )
     20 
     21 AS
     22 
     23     DECLARE @TotalRecord int
     24 
     25     DECLARE @TotalPage int
     26 
     27     DECLARE @CurrentPageSize int
     28 
     29     DECLARE @TotalRecordForPageIndex int
     30 
     31     declare @CountSql nvarchar(4000)  
     32 
     33     
     34 
     35     if @OrderType = 1
     36 
     37         BEGIN
     38 
     39             set @OrderBy = ' Order by ' + REPLACE(@OrderBy,',',' desc,') + ' desc '
     40 
     41         END
     42 
     43     else
     44 
     45         BEGIN
     46 
     47             set @OrderBy = ' Order by ' + REPLACE(@OrderBy,',',' asc,') + ' asc '        
     48 
     49         END
     50 
     51     
     52 
     53     -- 总记录
     54 
     55     set @CountSql='SELECT @TotalRecord=Count(*) From '+@TableName+' '+@Where
     56 
     57     execute sp_executesql @CountSql,N'@TotalRecord int out',@TotalRecord out
     58 
     59     
     60 
     61     SET @TotalPage=(@TotalRecord-1)/@PageSize+1
     62 
     63     
     64 
     65     -- 查询页数不得大于总页数
     66 
     67     if(@PageIndex > @TotalPage)
     68 
     69         set @PageIndex = @TotalPage
     70 
     71     
     72 
     73     SET @CurrentPageSize=(@PageIndex-1)*@PageSize
     74 
     75 
     76 
     77         
     78 
     79     -- 返回记录
     80 
     81     set @TotalRecordForPageIndex=@PageIndex*@PageSize
     82 
     83     
     84 
     85     exec    ('SELECT *
     86 
     87             FROM (SELECT TOP '+@TotalRecordForPageIndex+' '+@ReturnFields+', ROW_NUMBER() OVER ('+@OrderBy+') AS ROWNUM
     88 
     89             FROM '+@TableName+ ' ' + @Where +' ) AS TempTable
     90 
     91             WHERE TempTable.ROWNUM > 
     92 
     93             '+@CurrentPageSize)
     94 
     95 
     96 
     97     
     98 
     99     -- 返回总页数和总记录
    100 
    101     SELECT @TotalPage as PageCount,@TotalRecord as RecordCount
  • 相关阅读:
    Unity shader 代码高亮+提示
    PTA --- L2-003 月饼
    PTA --- L2-002 链表去重
    计蒜客 —— 字符串p型编码
    计蒜客 —— 最好的草
    最近忙科研立项 & 对博客的优化
    计蒜客 —— 删除单词后缀
    Tensorflow 保存模型 & 在java中调用
    Tensorflow 用训练好的模型预测
    Tensorflow 保存和载入训练过程
  • 原文地址:https://www.cnblogs.com/xiaoxin121/p/9765924.html
Copyright © 2011-2022 走看看