国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發 > 綜合 > 正文

精彩的近乎完美的分頁存儲過程

2024-07-21 02:10:36
字體:
來源:轉載
供稿:網友

create procedure main_table_pwqzc
(@pagesize int,
@pageindex int,
@docount bit,
@this_id)
as
if(@docount=1)
begin
select count(id) from luntan where [email protected]_id
end
else
begin
declare @indextable table(id int identity(1,1),nid int)
declare @pagelowerbound int
declare @pageupperbound int
set @pagelowerbound=(@pageindex-1)*@pagesize
set @[email protected][email protected]
set rowcount @pageupperbound
insert into @indextable(nid) select id from luntan where [email protected]_id order by reply_time desc
select a.* from luntan a,@indextable t where a.id=t.nid
and t.id>@pagelowerbound and t.id<[email protected] order by t.id
end
go

存儲過程會根據傳入的參數@docount來確定是不是要返回所有要分頁的記錄總數
特別是這兩行
set rowcount @pageupperbound
insert into @indextable(nid) select id from luntan where [email protected]_id order by reply_time desc

真的是妙不可言!!set rowcount @pageupperbound當記錄數達到@pageupperbound時就會停止處理查詢
,select id 只把id列取出放到臨時表里,select a.* from luntan a,@indextable t where a.id=t.nid
and t.id>@pagelowerbound and t.id<[email protected] order by t.id
而這句也只從表中取出所需要的記錄,而不是所有的記錄,結合起來,極大的提高了效率!!
妙啊,真的妙!!!!


create procedure paging_rowcount
(
@tables varchar(1000),
@pk varchar(100),
@sort varchar(200) = null,
@pagenumber int = 1,
@pagesize int = 10,
@fields varchar(1000) = '*',
@filter varchar(1000) = null,
@group varchar(1000) = null)
as

/*default sorting*/
if @sort is null or @sort = ''
 set @sort = @pk

/*find the @pk type*/
declare @sorttable varchar(100)
declare @sortname varchar(100)
declare @strsortcolumn varchar(200)
declare @operator char(2)
declare @type varchar(100)
declare @prec int

/*set sorting variables.*/
if charindex('desc',@sort)>0
 begin
  set @strsortcolumn = replace(@sort, 'desc', '')
  set @operator = '<='
 end
else
 begin
  if charindex('asc', @sort) = 0
   set @strsortcolumn = replace(@sort, 'asc', '')
  set @operator = '>='
 end


if charindex('.', @strsortcolumn) > 0
 begin
  set @sorttable = substring(@strsortcolumn, 0, charindex('.',@strsortcolumn))
  set @sortname = substring(@strsortcolumn, charindex('.',@strsortcolumn) + 1, len(@strsortcolumn))
 end
else
 begin
  set @sorttable = @tables
  set @sortname = @strsortcolumn
 end

select @type=t.name, @prec=c.prec
from sysobjects o
join syscolumns c on o.id=c.id
join systypes t on c.xusertype=t.xusertype
where o.name = @sorttable and c.name = @sortname

if charindex('char', @type) > 0
   set @type = @type + '(' + cast(@prec as varchar) + ')'

declare @strpagesize varchar(50)
declare @strstartrow varchar(50)
declare @strfilter varchar(1000)
declare @strsimplefilter varchar(1000)
declare @strgroup varchar(1000)

/*default page number*/
if @pagenumber < 1
 set @pagenumber = 1

/*set paging variables.*/
set @strpagesize = cast(@pagesize as varchar(50))
set @strstartrow = cast(((@pagenumber - 1)*@pagesize + 1) as varchar(50))

/*set filter & group variables.*/
if @filter is not null and @filter != ''
 begin
  set @strfilter = ' where ' + @filter + ' '
  set @strsimplefilter = ' and ' + @filter + ' '
 end
else
 begin
  set @strsimplefilter = ''
  set @strfilter = ''
 end
if @group is not null and @group != ''
 set @strgroup = ' group by ' + @group + ' '
else
 set @strgroup = ''
 
/*execute dynamic query*/
exec(
'
declare @sortcolumn ' + @type + '
set rowcount ' + @strstartrow + '
select @sortcolumn=' + @strsortcolumn + ' from ' + @tables + @strfilter + ' ' + @strgroup + ' order by ' + @sort + '
set rowcount ' + @strpagesize + '
select ' + @fields + ' from ' + @tables + ' where ' + @strsortcolumn + @operator + ' @sortcolumn ' + @strsimplefilter + ' ' + @strgroup + ' order by ' + @sort + '
'
)
go

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 加查县| 长沙县| 上高县| 东源县| 家居| 虎林市| 河北省| 兴文县| 呼和浩特市| 余庆县| 祁门县| 当阳市| 丹东市| 通榆县| 廊坊市| 额敏县| 鹤庆县| 平原县| 承德市| 汉源县| 祁门县| 镇平县| 垣曲县| 邵阳县| 孟津县| 关岭| 开原市| 牙克石市| 广德县| 电白县| 林州市| 安图县| 萝北县| 保定市| 收藏| 五河县| 林西县| 弋阳县| 达州市| 彭州市| 鄂温|