比起其它外层调用,无疑存储过程读取数据具有更高效率.以下是一般的分页读取数据过程:
CREATE PROCEDURE GetListByPage
@PageSize int = 5, -- 页容量,即每页显示的数据条数
@PageNum int = 1, -- 页码
@IsCount int = 0, -- 查询记录总数, 非 0 值则返回
@IsDesc int = 0, -- 排序, 0为升序,非0则降序
@strWhere varchar(1000) = '' -- 查询条件 (注意: 不要加 where)
AS
DECLARE @strOrder VARCHAR(1000) --排序语句
DECLARE @strTemp VARCHAR(1000) --临时字符串变量
DECLARE @strSelect VARCHAR(3000) --选择的数据项
DECLARE @strSql VARCHAR(6000) --查询语句
--防止查询条件为空
IF @strWhere IS NULL
SET @strWhere=''
--重新编写查询条件
IF @strWhere =''
SET @strWhere='1=1'
--生成数据排序语句
IF @IsDesc = 0
BEGIN
SET @strTemp = ' NOT IN(SELECT TOP '+ str((@PageNum-1)*@PageSize)
SET @strOrder = ' order by [QueryColumn] desc'
END
ELSE
BEGIN
SET @strTemp = ' NOT IN(SELECT TOP'+ str((@PageNum-1)*@PageSize)
SET @strOrder = ' order by [QueryColumn] asc'
END
--生成查询的数据列,如全部,可直接写为*
SET @strSelect=' yourSelectColumns '
--编写查询语句
--如不为查询记录总数,则生成查询数据语句
IF @IsCount=0
SET @strSql='SELECT TOP '+str(@PageSize)+' '+@strSelect+' FROM QueryTable WHERE '+@strWhere+' and [QueryColumn] '+@strTemp+' [QueryColumn] FROM QueryTable WHERE '+@strWhere+' '+@strOrder+') '+@strOrder
--如为查询记录总数,则生成查询总数语句
ELSE
SET @strSql='SELECT COUNT(*) FROM QueryTable WHERE '+@strWhere
--执行查询语句
EXEC(@strSql)
GO
其中,QueryColumn为数据表可以作为标识的数据,QueryTable为数据表名,yourSelectColumns为你查询的数据项
浙公网安备 33010602011771号