实现SQL分页的存储过程代码
SQL分页的存储过程代码,需要的朋友们直接拿去用,使用非常简单。
分享代码如下
USE[SendMessage]
GO
/******Object:StoredProcedure[dbo].[pages]ScriptDate:07/09/201513:46:50******/
SETANSI_NULLSON
GO
SETQUOTED_IDENTIFIERON
GO
ALTERPROC[dbo].[pages]
(
@tbnamenvarchar(100),--要分页显示的表名
@FieldKeynvarchar(1000),--用于定位记录的主键(惟一键)字段,可以是逗号分隔的多个字段
@PageCurrentint=1,--要显示的页码
@PageSizeint=10,--每页的大小(记录数)
@FieldShownvarchar(1000)='',--以逗号分隔的要显示的字段列表,如果不指定,则显示所有字段
@FieldOrdernvarchar(1000)='',--以逗号分隔的排序字段列表,可以指定在字段后面指定DESC/ASC
@WhereStringnvarchar(1000)=N''--查询条件
)
AS
begin
IFISNULL(@FieldKey,N'')=''
BEGIN
RAISERROR(N'分页处理需要主键(或者惟一键)',1,16)
RETURN
END
IFISNULL(@PageCurrent,0)<1SET@PageCurrent=1
IFISNULL(@PageSize,0)<1SET@PageSize=10
IFISNULL(@FieldShow,N'')=N''SET@FieldShow=N'*'
IFISNULL(@FieldOrder,N'')=N''
SET@FieldOrder=N''
ELSE
SET@FieldOrder=N'ORDERBY'+LTRIM(@FieldOrder)
IFISNULL(@WhereString,N'')=N''
SET@WhereString=N''
ELSE
SET@WhereString=N'WHERE'+@WhereString+N''
--计算分页显示的TOPN值
DECLARE@TopNvarchar(20),@StartRecordvarchar(20),@EndRecordvarchar(20)
SELECT@TopN=@PageSize,
@StartRecord=(@PageCurrent-1)*@PageSize+1,
@EndRecord=(@PageCurrent-1)*@PageSize+@PageSize
--第一页直接显示
IF@PageCurrent=1
EXEC(N'SELECTTOP'+@TopN
+N''+@FieldShow
+N'FROM'+@tbname
+N''+@WhereString
+N''+@FieldOrder)
ELSE
EXEC(N'withtemptblas(
selectROW_NUMBER()Over('+@FieldOrder+')asrow,'+@FieldKey+'from'+@tbname+N''+@WhereString+')
select'+@FieldShow+'from(selectB.*from(select'+@FieldKey+'fromtemptblwhererowbetween'+@StartRecord+'and'+@EndRecord+')Aleftjoin'+@tbname+'BonA.'+@FieldKey+'=B.'+@FieldKey+')C')
END
以上就是本文的全部内容,希望对大家的学习有所帮助。