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
@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...