栏目分类:
子分类:
返回
终身学习网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
终身学习网 > IT > 系统运维 > 数据库 > MySQL > MsSql

三种SQL分页查询的存储过程代码

MsSql 更新时间:发布时间: 百科书网 趣学号
复制代码 代码如下:
--根据MAX(MIN)ID
CREATE PROC [dbo].[proc_select_id]
@pageindex int=1,--当前页数
@pagesize int=10,--每页大小
@tablename VARCHAr(50)='',--表名
@fields VARCHAr(1000)='',--查询的字段集合
@keyid VARCHAr(50)='',--主键
@condition NVARCHAr(1000)='',--查询条件
@orderstr VARCHAr(500),--排序条件
@totalRecord BIGINT OUTPUT--总记录数
AS
IF ISNULL(@orderstr,N'')=N'' SET @orderstr=N' ORDER BY '+@keyid+N' DESC '
IF ISNULL(@fields,N'')=N'' SET @fields=N'*'
IF ISNULL(@condition,N'')=N'' SET @condition=N'1=1'
DECLARE @sql NVARCHAr(4000)
--IF(@totalRecord IS NULL)
--BEGIN
SET @sql=N'SELECT @totalRecord=COUNT(*)'
+N' FROM '+@tablename
+N' WHERe '+@condition
EXEC sp_executesql @sql,N'@totalRecord INT OUTPUT',@totalRecord OUTPUT
--END
IF(@pageindex=1)
BEGIN
SET @sql=N'SELECt TOP '+STR(@pagesize)+N' '+@fields+N' FROM '+@tablename+N' WHERe '+@condition+N' '+@orderstr
EXEC(@sql)
END
ELSE
BEGIN
DECLARE @operatestr CHAr(3),@comparestr CHAr(1)
SET @operatestr='MAX'
SET @comparestr='>'
IF(@orderstr<>'')
BEGIN
IF(CHARINDEX('desc',LOWER(@orderstr))<>0)
BEGIN
SET @operatestr='MIN'
SET @comparestr='<'
END
END
SET @sql=N'SELECt top '+STR(@pagesize)+N' '+@fields+N' FROM '+@tablename+N' WHERe '+@keyid+@comparestr
+N'(SELECt '+@operatestr+N'('+@keyid+N') FROM '+@tablename+N' WHERe '+@keyid
+N' IN (SELECt TOP '+STR((@pageindex-1)*@pagesize)+N' '+@keyid+N' FROM '+@tablename+N' WHERe '
+@condition+N' '+@orderstr+N')) AND '+@condition+N' '+@orderstr
EXEC(@sql)
END
GO


--根据ROW_NUMBER() OVER
CREATE PROC [dbo].[proc_select_page_row]
@pageindex INT=1,--当前页数
@pagesize INT=10,--每页大小
@tablename VARCHAr(50)='',--表名
@fields VARCHAr(1000)='*',--查询的字段集合
@keyid VARCHAr(50)='',--主键
@condition NVARCHAr(1000)='',--查询条件
@orderstr VARCHAr(500),--排序条件
@totalRecord BIGINT OUTPUT--总记录数
AS
IF ISNULL(@orderstr,N'')=N'' SET @orderstr=N' ORDER BY '+@keyid+N' DESC '
IF ISNULL(@fields,N'')=N'' SET @fields=N'*'
IF ISNULL(@condition,N'')=N'' SET @condition=N'1=1'
DECLARE @sql NVARCHAr(4000)
-- IF @totalRecord IS NULL
-- BEGIN
SET @sql=N'SELECT @totalRecord=COUNT(*)'
+N' FROM '+@tablename
+N' WHERe '+@condition
EXEC sp_executesql @sql,N'@totalRecord bigint OUTPUT',@totalRecord OUTPUT
--END
IF(@pageindex=1)
BEGIN
SET @sql=N'SELECt TOP '+STR(@pagesize)+N' '+@fields+N' FROM '+@tablename+N' WHERe '+@condition+N' '+@orderstr
EXEC(@sql)
END
ELSE
BEGIN
DECLARE @StartRecord INT
SET @StartRecord = (@pageindex-1)*@pagesize + 1
SET @sql=N'SELECt * FROM (SELECt ROW_NUMBER() OVER ('+ @orderstr +N') AS rowId,'+@fields+N' FROM '+ @tablename+N') AS T WHERe rowId>='+STR(@StartRecord)+N' and rowId<='+STR(@StartRecord + @pagesize - 1)
EXEC(@sql)
END
GO


--根据TOP ID
CREATE PROC [dbo].[proc_select_page_top]
@pageindex INT=1,--当前页数
@pagesize INT=10,--每页大小
@tablename VARCHAr(50)='',--表名
@fields VARCHAr(1000)='',--查询的字段集合
@keyid VARCHAr(50)='',--主键
@condition NVARCHAr(1000)='',--查询条件
@orderstr VARCHAr(500),--排序条件
@totalRecord BIGINT OUTPUT--总记录数
AS
IF ISNULL(@orderstr,N'')=N'' SET @orderstr=N' ORDER BY '+@keyid+N' DESC '
IF ISNULL(@fields,N'')=N'' SET @fields=N'*'
IF ISNULL(@condition,N'')=N'' SET @condition=N'1=1'
DECLARE @sql NVARCHAr(4000)
--IF(@totalRecord IS NULL)
--BEGIN
SET @sql=N'SELECT @totalRecord=COUNT(*)'
+N' FROM '+@tablename
+N' WHERe '+@condition
EXEC sp_executesql @sql,N'@totalRecord INT OUTPUT',@totalRecord OUTPUT
--END
IF(@pageindex=1)
BEGIN
SET @sql=N'SELECt TOP '+STR(@pagesize)+N' '+@fields+N' FROM '+@tablename+N' WHERe '+@condition+N' '+@orderstr
EXEC(@sql)
END
ELSE
BEGIN
SET @sql=N'SELECt TOP '+STR(@pagesize)+N' '+@fields+N' FROM '+@tablename+N' WHERe '+@keyid
+N' NOT IN(SELECt TOP '+STR((@pageindex-1)*@pagesize)+N' '+@keyid+N' FROM '
+@tablename+N' WHERe '+@condition+N' '+@orderstr+N') AND '+@condition+N' '+@orderstr
EXEC(@sql)
END
GO
转载请注明:文章转载自 www.051e.com
本文地址:http://www.051e.com/it/170213.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 ©2023-2025 051e.com

ICP备案号:京ICP备12030808号