电脑故障

位置:IT落伍者 >> 电脑故障 >> 浏览文章

精彩的近乎完美的分页存储过程


发布日期:2023/3/9
 

CREATE procedure main_table_pwqzc

(@pagesize int

@pageindex int

@docount bit

@this_id)

as

if(@docount=)

begin

select count(id) from luntan where this_id=@this_id

end

else

begin

declare @indextable table(id int identity()nid int)

declare @PageLowerBound int

declare @PageUpperBound int

set @PageLowerBound=(@pageindex)*@pagesize

set @PageUpperBound=@PageLowerBound+@pagesize

set rowcount @PageUpperBound

insert into @indextable(nid) select id from luntan where this_id=@this_id order by reply_time desc

select a* from luntan a@indextable t where aid=tnid

and tid>@PageLowerBound and tid<=@PageUpperBound order by tid

end

GO

存储过程会根据传入的参数@docount来确定是不是要返回所有要分页的记录总数

特别是这两行

set rowcount @PageUpperBound

insert into @indextable(nid) select id from luntan where this_id=@this_id order by reply_time desc

真的是妙不可言!!set rowcount @PageUpperBound当记录数达到@PageUpperBound时就会停止处理查询

select id 只把id列取出放到临时表里select a* from luntan a@indextable t where aid=tnid

and tid>@PageLowerBound and tid<=@PageUpperBound order by tid

而这句也只从表中取出所需要的记录而不是所有的记录结合起来极大的提高了效率!!

妙啊真的妙!!!!

CREATE PROCEDURE Paging_RowCount

(

@Tables varchar()

@PK varchar()

@Sort varchar() = NULL

@PageNumber int =

@PageSize int =

@Fields varchar() = *

@Filter varchar() = NULL

@Group varchar() = NULL)

AS

/*Default Sorting*/

IF @Sort IS NULL OR @Sort =

SET @Sort = @PK

/*Find the @PK type*/

DECLARE @SortTable varchar()

DECLARE @SortName varchar()

DECLARE @strSortColumn varchar()

DECLARE @operator char()

DECLARE @type varchar()

DECLARE @prec int

/*Set sorting variables*/

IF CHARINDEX(DESC@Sort)>

BEGIN

SET @strSortColumn = REPLACE(@Sort DESC )

SET @operator = <=

END

ELSE

BEGIN

IF CHARINDEX(ASC @Sort) =

SET @strSortColumn = REPLACE(@Sort ASC )

SET @operator = >=

END

IF CHARINDEX( @strSortColumn) >

BEGIN

SET @SortTable = SUBSTRING(@strSortColumn CHARINDEX(@strSortColumn))

SET @SortName = SUBSTRING(@strSortColumn CHARINDEX(@strSortColumn) + LEN(@strSortColumn))

END

ELSE

BEGIN

SET @SortTable = @Tables

SET @SortName = @strSortColumn

END

SELECT @type=tname @prec=cprec

FROM sysobjects o

JOIN syscolumns c on oid=cid

JOIN systypes t on cxusertype=txusertype

WHERE oname = @SortTable AND cname = @SortName

IF CHARINDEX(char @type) >

SET @type = @type + ( + CAST(@prec AS varchar) + )

DECLARE @strPageSize varchar()

DECLARE @strStartRow varchar()

DECLARE @strFilter varchar()

DECLARE @strSimpleFilter varchar()

DECLARE @strGroup varchar()

/*Default Page Number*/

IF @PageNumber <

SET @PageNumber =

/*Set paging variables*/

SET @strPageSize = CAST(@PageSize AS varchar())

SET @strStartRow = CAST(((@PageNumber )*@PageSize + ) AS varchar())

/*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

上一篇:通过rownum隐式游标实现与TOP的功能

下一篇:RedHat8.0下轻松实现主板状态监测