/ ************************************************* *********************
パラメータ:ページごとに表示するのPageSizeレコード@ SqlStr SQL文@ [並べ替えのソートフィールド@ @PrimaryKey主キー、、、、pageIndexパラメータ@このページ(開始0)
********************************************** ************************************************************ /
ALTER手順[DBO] [PageQuery]。
@PrimaryKey VARCHAR(100)、 -主キー
@OrderByのVARCHAR(100 )、 -ソートフィールドの
@SqlStrのVARCHAR(8000)、 - SQLステートメント
@PageSize int型、 -ページあたりに表示するレコード
このページint-- @PageIndex()1から始まる
-のRecordCount出力はint @ -リターン合計レコードは
AS
@ExecSql VARCHAR(8000)を宣言- SQLの組み合わせを実行するために
IFのOrderBy @ = ''
'のPrimaryKey @ + + 'ASC'でSET =のOrderBy @'注文
他のIF(LEN(@OrderBy)<上位8か。 (サブストリング(並べ替え基準@、1,8))<> 'によりORDER')
SET = [並べ替え@ '「+ @ [並べ替え順
もし@がPageSize = -1--用于AJAX的第一次查询
設定@がPageSize = 0
に設定@ pageIndexパラメータ= @ pageIndexパラメータ-1
プリント( '-----' + CAST(@PageIndexとしてはvarchar(10)))
始める
@recordCount int型、@ PAGECOUNT int型宣言
@sのnvarchar(4000)を宣言
@s = N'select @recordCount =カウントを設定します( '+ @主キー+')( '+ @ SqlStr +')TN」から
のexec sp_executesqlをする@ S、N RecordCountを出力@ '@recordCount INT出力'、
(@pageSize> 0)であれば
@pageCount =(@recordCount - 1 + @PageSize)設定/ @PageSize; -总页数
他
@pageCount = 0に設定; -总页数
if @PageIndex<=0--如果是第一页就执行这个
begin
set @ExecSql='select top '+cast(@PageSize as varchar(100))+' * from ('+@SqlStr+') T '+@OrderBy
end
else
begin
if charindex('2000 - 8.00.',@@version)>0
begin
set @ExecSql=
'select top '+cast(@PageSize as varchar(100))+' *
from ('+@SqlStr+') as T where T.'+@PrimaryKey+' not in
(select top '+cast((@PageSize*@PageIndex) as varchar(100))+' '+@PrimaryKey+'
from ('+@SqlStr+') T2 '+@OrderBy+') '+ @OrderBy
end
else
begin
set @ExecSql=
'select * from
(
select * from
(SELECT *, #RowNum#=ROW_NUMBER() OVER('+@OrderBy+') FROM ('+@SqlStr+') T1) T2 where T2.#RowNum#>='+cast(@PageSize*@PageIndex+1 as varchar(10))+' and T2.#RowNum#<='+cast(@PageSize*(@PageIndex+1) as varchar(10))+'
) T3
'
end
end
exec (@ExecSql+' select '+@recordCount+' as RecordCount,'+@pageCount+' as PageCount ')
終わり