SQL 儲存過程編寫分頁(子父級顯示)

2022-03-15 11:14:39 字數 4612 閱讀 2888

use

[prettycloud]go

/****** object: storedprocedure [dbo].[getrecursionlistbypage] script date: 04/20/2018 14:27:08 *****

*/set ansi_nulls on

goset quoted_identifier on

go/*

功能:分頁獲取組織列表

*/alter

procedure

[dbo

].[getrecursionlistbypage](

@tblname

nvarchar(300), --

--要顯示的表或多個表的連線

@fldname

nvarchar(500) ='*

', --

--要顯示的字段列表

@pagesize

int=

10, --

--每頁顯示的記錄個數

@page

int=

1, --

--要顯示那一頁的記錄

@fldsort

nvarchar(200) =

null, --

--排序字段列表或條件

@sort

bit=

0, --

--排序方法,0為公升序,1為降序

@strcondition

nvarchar(1000) =

null, --

--查詢條件,不需where

@pagecount

int=

1 output, --

--查詢結果分頁後的總頁數

@counts

int=

1 output --

--查詢到的記錄數 )as

begin

set nocount on

declare

@sqltmp

nvarchar(1000) --

--存放動態生成的sql語句

declare

@strtmp

nvarchar(1000) --

--存放取得查詢結果總數的查詢語句

declare

@strsorttype

nvarchar(10) --

--資料排序規則a

declare

@strfsorttype

nvarchar(10) --

--資料排序規則b

declare

@sqlselect

nvarchar(50) --

--對含有distinct的查詢進行sql構造

declare

@sqlcounts

nvarchar(50) --

--對含有distinct的總數查詢進行sql構造

set@sqlselect='

select

'set

@sqlcounts='

count(*)'if

@sort=0

---是否排序

begin

set@strfsorttype='

asc

'set

@strsorttype='

asc

'end

else

begin

set@strfsorttype='

desc

'set

@strsorttype='

desc

'end

if@strcondition

isnull

or@strcondition=''

--沒有設定顯示條件

begin

set@strtmp

=@sqlselect+'

@counts='+

@sqlcounts+'

from '+

@tblname+'

where isnull(parentid,''0

'')=''0

'''end

else

begin

set@strtmp

=@sqlselect+'

@counts='+

@sqlcounts+'

from '+

@tblname+'

where isnull(parentid,''0

'')=''0

'''+

@strcondition

end--

--取得查詢結果總數量-----

exec sp_executesql @strtmp,n'

@counts int out

',@counts

out

declare

@tmpcounts

intif

@counts=0

begin

set@tmpcounts=1

endelse

begin

set@tmpcounts

=@counts

end--

取得分頁總數

set@pagecount

=(@tmpcounts

+@pagesize

-1)/

@pagesize

declare

@mainsql

nvarchar(max)=

''declare

@rebuildfldname

varchar(3000

)

set@rebuildfldname

=@tblname+'

.'+replace(@fldname,'

,',','

+@tblname+'

.')

set@mainsql='

with org

'set

@mainsql

=@mainsql+'

as '

set@mainsql

=@mainsql+'

( 'set@mainsql

=@mainsql

+@sqlselect

+@fldname+'

from

'set

@mainsql

=@mainsql+'

( 'set@mainsql

=@mainsql

+@sqlselect+'

row_number() over(order by '+

@fldsort+'

'+@strfsorttype+'

) as num,

'set

@mainsql

=@mainsql

+@fldname

set@mainsql

=@mainsql+'

from '+

@tblname+'

where isnull(parentid,''0

'')=''0

''and isnull(deletemark,0)=0

'set

@mainsql

=@mainsql+'

) temptable

'set

@mainsql

=@mainsql+'

where num between '+

str((@page

-1)*

@pagesize

+1)+

'and '+

str(@page

*@pagesize

)

set@mainsql

=@mainsql+'

union all

'set

@mainsql

=@mainsql

+@sqlselect+'

'+@rebuildfldname

set@mainsql

=@mainsql+'

from org

'set

@mainsql

=@mainsql+'

join '+

@tblname

set@mainsql

=@mainsql+'

on org.id='+

@tblname+'

.parentid

'set

@mainsql

=@mainsql+'

)'set@mainsql

=@mainsql

+@sqlselect

+@fldname

set@mainsql

=@mainsql+'

from org where 1=1

'set

@mainsql

=@mainsql

+@strcondition

------返回查詢結果-----

exec sp_executesql @mainsql

print

@mainsql

set nocount off

end

百萬級SQL分頁儲存過程

百萬級sql分頁儲存過程,請尊重原作者資訊.我只是更新一部分資料,原作者在分頁的處理過程中有一點錯誤.檢測了程式.發現並休正過來的.descript 分頁儲存過程 author blue.dream date 2004 8 18 21 01 update xqf222 date 18 11 2007...

sql 儲存過程分頁

create proc myx prpagerecordset querystr nvarchar 1000 keyfield nvarchar 200 pagesize int,pagenumber int as begin declare sqltext as nvarchar 4000 dec...

SQL 儲存過程 分頁

1.俄羅斯儲存過程 的改良版 create procedure pagination1 pagesize int,頁面大小,如每頁儲存20條記錄 pageindex int 當前頁碼 as set nocount on begin declare indextable table id int id...