SQLServer存储过程实现单条件分页

SQLServer-代码:

 1 SQLServer Procedure Pagination_basic:
 2 ALTER PROCEDURE [qiancheng].[Pagination_basic] (
 3 @Table_name VARCHAR (255),
 4 --name of table
 5 @Rows_target VARCHAR (1000) = ‘*‘,
 6 --search rows
 7 @Rows_condition VARCHAR (1000) = ‘‘,
 8 --the condition to find target (no where)
 9 @Rows_order VARCHAR (255) = ‘‘,
10 --the rows to rank
11 @Order_type INT = 0,
12 -- *Q*C* 0 normal 1 down
13 @PageSizes INT = 10,
14 --the size of each page
15 @PageIndex INT = 1,
16 --current page
17 @ShowPages INT,
18 --whether show the pages *Q*C* 1-yes 0-no
19 @ShowRecords INT,
20 --whether show the record *Q*C* 1-yes 0-no
21 @Records_total INT OUTPUT,
22 --returned total records
23 @Pages_total INT OUTPUT --returned total pages
24 ) AS
25 DECLARE @MainSQL_QC nvarchar (2000) --Main SQL sentence
26 DECLARE @Var_QC VARCHAR (100) --Temporary variate
27 DECLARE @Order_QC VARCHAR (400) --the sort to rank
28 SET @Records_total = 0
29 SET @Pages_total = 0
30 IF @ShowRecords = 1
31 OR @ShowPages = 1
32 BEGIN
33
34 IF @Rows_condition != ‘‘
35 SET @MainSQL_QC = ‘select @Records_total = count(1) from [‘ + @Table_name + ‘] where ‘ +@Rows_condition
36 ELSE
37
38 SET @MainSQL_QC = ‘select @Records_total = count(1) from [‘ + @Table_name + ‘]‘ EXEC sp_executesql @MainSQL_QC,
39  N‘@Records_total int out‘ ,@Records_total OUTPUT
40 END
41 IF @ShowPages = 1
42 BEGIN
43
44 IF @Records_total <= @PageSizes
45 SET @Pages_total = 1
46 ELSE
47
48 BEGIN
49
50 SET @Pages_total = @Records_total /@PageSizes
51 IF (@Records_total %@PageSizes) > 0
52 SET @Pages_total = @Pages_total + 1
53 END
54 END
55 IF @Order_type = 1
56 BEGIN
57
58 SET @Var_QC = ‘<(select min‘
59 SET @Order_QC = ‘ order by [‘ + @Rows_order + ‘] desc‘
60 END
61 ELSE
62
63 BEGIN
64
65 SET @Var_QC = ‘>(select max‘
66 SET @Order_QC = ‘ order by [‘ + @Rows_order + ‘] asc‘
67 END
68 IF @PageIndex = 1
69 BEGIN
70
71 IF @Rows_condition != ‘‘
72 SET @MainSQL_QC = ‘select top ‘ + str(@PageSizes) + ‘ ‘ +@Rows_target + ‘ from [‘ + @Table_name + ‘] where ‘ + @Rows_condition + ‘ ‘ + @Order_QC
73 ELSE
74
75 SET @MainSQL_QC = ‘select top ‘ + str(@PageSizes) + ‘ ‘ +@Rows_target + ‘ from [‘ + @Table_name + ‘] ‘ + @Order_QC
76 END
77 ELSE
78
79 BEGIN
80
81 IF @Rows_condition != ‘‘
82 SET @MainSQL_QC = ‘select top ‘ + str(@PageSizes) + ‘ ‘ +@Rows_target + ‘ from [‘ + @Table_name + ‘] where [‘ + @Rows_order + ‘]‘ + @Var_QC + ‘([‘ + @Rows_order + ‘]) from (select top ‘ + str((@PageIndex - 1) *@PageSizes) + ‘ [‘ + @Rows_order + ‘] from [‘ + @Table_name + ‘] where ‘ + @Rows_condition + ‘ ‘ + @Order_QC + ‘) as Tmep_QC) and ‘ + @Rows_condition + ‘ ‘ + @Order_QC
83 ELSE
84
85 SET @MainSQL_QC = ‘select top ‘ + str(@PageSizes) + ‘ ‘ +@Rows_target + ‘ from [‘ + @Table_name + ‘] where [‘ + @Rows_order + ‘]‘ + @Var_QC + ‘([‘ + @Rows_order + ‘]) from (select top ‘ + str((@PageIndex - 1) *@PageSizes) + ‘ [‘ + @Rows_order + ‘] from [‘ + @Table_name + ‘]‘ + @Order_QC + ‘) as Tmep_QC)‘ + @Order_QC
86 END EXEC (@MainSQL_QC)

调用:execute pagination_basic ‘UserDetail‘,‘*‘,‘‘,‘id‘,‘1‘,‘5‘,‘1‘,‘1‘,‘1‘,‘‘,‘‘

主要是末尾的语句,拆分下来便是这样:

select top 每页数 列名 from [表名] where [排序字段名] <    --1 倒序输出若列 小于之前页数的最小值

(select min ( [排序字段名] )from --2 获得一个指定列名中的最小值并输出

(select top (当前页-1)*每页数 [排序字段名] from [表名] where [条件] [排序类型]) --3 选择之前页数总数据倒序输出

as Tmep_QC)--4 建立一个名为Tmep_QC的临时表--2 获得一个指定列名中的最小值并输出

and [条件] [排序类型]--1 倒序输出若列 小于之前页数的最小值

时间: 2024-10-05 04:27:25

SQLServer存储过程实现单条件分页的相关文章

SqlServer 存储过程分页

一:存储过程实现分页 例子:查询楼盘列表 ALTER procedure [dbo].[BM_GetBlockList] @pageIndex int,-------页码数 @PageSize int,---------展示的条数 @cityId int as declare @sql nvarchar(max) , @sql2 nvarchar(max) set @sql=' from AgentRecmd_Block ab LEFT JOIN BASE_BLOCK block on ab.B

sqlserver 存储过程分页管理

-- =============================================-- Author:  <Author:刘畅>-- Create date: <Create Date:2014-07-31>-- Description: <Description:sqlserver 2008 R2 数据库分页存储过程> -- =============================================CREATE PROCEDURE pr_

Sqlserver 存储过程

转载自:http://www.cnblogs.com/hoojo/archive/2011/07/19/2110862.html Transact-SQL中的存储过程,非常类似于Java语言中的方法,它可以重复调用.当存储过程执行一次后,可以将语句缓存中,这样下次执行的时候直接使用缓存中的语句.这样就可以提高存储过程的性能. Ø 存储过程的概念 存储过程Procedure是一组为了完成特定功能的SQL语句集合,经编译后存储在数据库中,用户通过指定存储过程的名称并给出参数来执行. 存储过程中可以包

数据的查询(一)——单条件查询

数据的查询分为但条件查询和多条件查询 在查询之前,将查询数据库进行封装 <?php class DBDA { public $host="localhost"; //数据库地址 public $uid = "root"; //数据库用户名 public $pwd = ""; //密码 //执行sql语句,返回相应的结果 //参数:$sql代表执行的sql语句:$type是sql语句类型0代表查询,1代表其他:$db代表操作的数据库 publ

SqlServer存储过程(增删改查)

* IDENT_CURRENT 返回为任何会话和任何作用域中的特定表最后生成的标识值. CREATE PROCEDURE [dbo].[PR_NewsAffiche_AddNewsEntity] ( @NewsTitle varchar(200), @NewsContent varchar(4000), @Creator varchar(50), @LastNewsId int output, @DepartId int ) AS BEGIN SET NOCOUNT ON; insert int

AspNetPager控件分页使用方法

AspNetPager控件官方下载地址:http://www.webdiyer.com/aspnetpager/ 把控件加到项目中(添加自定义控件的方法),并把它拖放到页面上 <asp:ScriptManager ID="ScriptManager1" runat="server"> </asp:ScriptManager> <asp:UpdatePanel ID="UpdatePanel1" runat="

对sqlserver存储过程合游标的一些理解

在最近老板给我的数据库操作要求中,有一张类似购物清单样式的表,表中有客户ID,商品ID,商品数量,单价和商品总价,出售日期.还有一张商品折扣信息表,在这基础上商品价格同一商品价格会有差异,不同客户最高折扣额不同,折扣率也有差异,要求用sqlserver存储过程合游标表诉 一开始根本没有思路和头绪,听老大讲解是要用存储过程将查询到的数据存储好,再用游标循环遍历.对于存储过程合游标的表诉一直不太熟,之前只是将用sql语句查到的结果集放到存储过程里面,对于游标的了解不够深入.所以一开始也是想着用sql

SqlServer存储过程传入Table参数

今天是周日,刚好有空闲时间整理一下这些天工作业务中遇到的问题. 有时候我们有这样一个需求,就是在后台中传过来一个IList<类>的泛型集合数据,该集合是某个类的实例集合体,然后将该集合中的实例的数据一个个地插入到数据库或者更新到数据库中去.一开始我想到的方法是拼接字符串,然后通过存储过程对接收到的字符串进行截取,再一个个地插入或者更新到数据库中去,这是最原始的方法,不过过程会比较复杂,想到这就头疼.后来查找发现说SqlServer2008中为存储过程添加了一个新特性,可以传递表类型的参数,既然

SQLSERVER存储过程语法具体解释

SQL SERVER存储过程语法: Create PROC [ EDURE ] procedure_name [ ; number ]     [ { @parameter data_type }         [ VARYING ] [ = default ] [ OUTPUT ]     ] [ ,...n ] [ WITH     { RECOMPILE | ENCRYPTION | RECOMPILE , ENCRYPTION } ] [ FOR REPLICATION ] AS sq