SQL分页的存储过程代码,需要的朋友们直接拿去用,使用非常简单。
分享代码如下
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
|
USE [SendMessage] GO /****** Object: StoredProcedure [dbo].[pages] Script Date : 07/09/2015 13:46:50 ******/ SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO ALTER PROC [dbo].[pages] ( @tbname nvarchar(100), --要分页显示的表名 @FieldKey nvarchar(1000), --用于定位记录的主键(惟一键)字段,可以是逗号分隔的多个字段 @PageCurrent int =1, --要显示的页码 @PageSize int =10, --每页的大小(记录数) @FieldShow nvarchar(1000)= '' , --以逗号分隔的要显示的字段列表,如果不指定,则显示所有字段 @FieldOrder nvarchar(1000)= '' , --以逗号分隔的排序字段列表,可以指定在字段后面指定DESC/ASC @WhereString nvarchar(1000)=N '' --查询条件 ) AS begin IF ISNULL (@FieldKey,N '' )= '' BEGIN RAISERROR(N '分页处理需要主键(或者惟一键)' ,1,16) RETURN END IF ISNULL (@PageCurrent,0)<1 SET @PageCurrent=1 IF ISNULL (@PageSize,0)<1 SET @PageSize=10 IF ISNULL (@FieldShow,N '' )=N '' SET @FieldShow=N '*' IF ISNULL (@FieldOrder,N '' )=N '' SET @FieldOrder=N '' ELSE SET @FieldOrder=N 'ORDER BY ' +LTRIM(@FieldOrder) IF ISNULL (@WhereString,N '' )=N '' SET @WhereString=N '' ELSE SET @WhereString=N 'WHERE ' +@WhereString+N '' --计算分页显示的TOPN值 DECLARE @TopN varchar (20),@StartRecord varchar (20),@EndRecord varchar (20) SELECT @TopN=@PageSize, @StartRecord=(@PageCurrent-1)*@PageSize+1, @EndRecord=(@PageCurrent-1)*@PageSize+@PageSize --第一页直接显示 IF @PageCurrent=1 EXEC (N 'SELECT TOP ' +@TopN +N ' ' +@FieldShow +N ' FROM ' +@tbname +N ' ' +@WhereString +N ' ' +@FieldOrder) ELSE EXEC (N 'with temptbl as( select ROW_NUMBER() Over(' +@FieldOrder+ ') as row, ' +@FieldKey+ ' from ' +@tbname+N ' ' +@WhereString+ ') select ' +@FieldShow+ ' from (select B.* from (select ' +@FieldKey+ ' from temptbl where row between ' +@StartRecord+ ' and ' +@EndRecord+ ')A left join ' +@tbname+ ' B on A.' +@FieldKey+ '=B.' +@FieldKey+ ')C' ) END |
以上就是本文的全部内容,希望对大家的学习有所帮助。