Heim > Datenbank > MySQL-Tutorial > 存储过程-简单通用分页

存储过程-简单通用分页

WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWB
Freigeben: 2016-06-07 15:28:47
Original
1072 Leute haben es durchsucht

create PROCEDURE [dbo].[GetPageDataOutRowNumber](@tn nvarchar(30),--表名称@idn nvarchar(20),--表主键名称@pi int = 1,--当前页数 @ps int = 7,--每页大小 @wh nvarchar(255) = ,--wehre查询条件@oby nvarchar(255) = ,--orderby 排序@rc int output,--

 

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

create PROCEDURE [dbo].[GetPageDataOutRowNumber]

(

@tn nvarchar(30),--表名称

@idn nvarchar(20),--表主键名称

@pi int = 1,--当前页数

@ps  int = 7,--每页大小

@wh nvarchar(255) = '',--wehre查询条件

@oby nvarchar(255) = '',--orderby 排序

@rc int output,--总行数(传出参数)

@pc int output--总页数(传出参数)

)

AS

DECLARE @sql NVARCHAR(225)='',@sqlCount NVARCHAR(225)=''

--1.计算总行数和总页数

SET @sqlCount = 'SELECT @rc=COUNT(['+@idn+']),@pc=CEILING((COUNT('+@idn+')+0.0)/'+ CAST(@ps AS VARCHAR)+') FROM ' + @tn

IF LEN(@wh)>1

    set @sqlCount=@sqlCount+' WHERE '+@wh

print @sqlCount

EXEC SP_EXECUTESQL @sqlCount,N'@rc INT OUTPUT,@pc INT OUTPUT',@rc OUTPUT,@pc OUTPUT

--2.分页

--2.1如果是第一页,则直接查询

IF @pi = 1

BEGIN

    SET @sql='SELECT TOP '+str(@ps) +' * FROM '+@tn

    IF LEN(@wh)>1

        set @sql=@sql+' WHERE '+@wh

    IF LEN(@oby)>1

            SET @sql=@sql+' order by ' +@oby

EXEC(@sql)

END

ELSE--2.2如果不是第一页,则拼接查询语句

BEGIN

    SET NOCOUNT ON

    SET @sql='SELECT * FROM (select row_number() over(order by '

    IF LEN(@oby)>1

        set @sql=@sql + @oby+') as rowNum,* from '+@tn

    else

        set @sql=@sql + @idn+') as rowNum,* from '+@tn

    IF LEN(@wh)>1

        set @sql=@sql+' where '+@wh

    set @sql=@sql+&#39;)as temp where rowNum>&#39;+str(@ps * (@pi-1))+&#39; and rowNum<=&#39;+str(@ps*@pi)

    print @sql

    EXEC(@sql)

    SET NOCOUNT OFF

END

 

--测试语句

declare @rc int,@pc int

exec [GetPageDataOutRowNumber] &#39;Ams_Area&#39;,&#39;ar_id&#39;,2,5,&#39;&#39;,&#39; ar_id desc&#39;,@rc output,@pc output

select @rc,@pc

Nach dem Login kopieren
Verwandte Etiketten:
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage