MSSQL分页存储过程,支持连接查询等复杂的查询

 

复制代码
CREATE PROCEDURE Pagination
(
 
@SQL nvarchar(1024),   --查询语句
 @PageSize int = 20,    --分页大小
 @PageIndex int = 0,    --分页索引
 @Sort nvarchar(100= '',    --排序字段
 @TotalCount int = 0 output --总数    
)
AS

set nocount on
/*声明查询字符串*/
declare @strSQL nvarchar(4000)

set @strSQL = ' select @TotalCount=count(*) from ('+@SQL+') as t ' 

/*取得查询结果总数*/
exec sp_executesql
@strSQL
N
'@TotalCount int=0 OUTPUT'
@TotalCount=@TotalCount OUTPUT 

declare @ItemCount int 
declare @_PageIndex int

set @_PageIndex = @PageIndex + 1;
/*确定搜索边界*/
set @ItemCount = @TotalCount - @PageSize * @_PageIndex

if(@ItemCount < 0
    
set @ItemCount = @ItemCount + @PageSize 
else 
    
set @ItemCount = @PageSize 

if(@ItemCount < 0return 1 

if(@Sort != '')
begin
    
/*声明排序变量*/
    
declare @IndexSort1 nvarchar(50), @IndexSort2 nvarchar(50), @Sort1 nvarchar(50), @Sort2 nvarchar(50)
    
    
SET @Sort1 = @Sort
    
SET @Sort2 = Replace(Replace(Replace(@Sort'DESC''@SORT'), 'ASC''DESC'), '@SORT''ASC')

    
set @strSQL = 'SELECT * FROM 
    (SELECT TOP 
' + STR(@ItemCount+ ' * FROM 
    (SELECT TOP 
' + STR(@PageSize * @_PageIndex+ ' * FROM 
    (
'+@SQL+') AS t0 
    ORDER BY 
'+@Sort1 +') AS t1 
    ORDER BY 
'+@Sort2 +') AS t2 
    ORDER BY 
' +@Sort 
end
else
begin
    
set @strSQL = 'SELECT * FROM 
    (SELECT TOP 
' + STR(@ItemCount+ ' * FROM 
    (SELECT TOP 
' + STR(@PageSize * @_PageIndex+ ' * FROM 
    (
'+@SQL+') As t0) 
    aS t1) 
    AS t2
'
end

exec sp_executesql 
@strSQL
GO


复制代码

 

 

只要排序字段是索引字段则查询速度就会很快 写排序字段的时候不能忽略ASC 如:

 

exec Pagination 'select * from [order] '200'CreateTime' 

exec Pagination 'select * from [order] '200'CreateTime,  Money DESC' 

 

以上是错误的写法 下面这样写才是正确的

 

exec Pagination 'select * from [order] '200'CreateTime ASC' 

exec Pagination 'select * from [order] '200'CreateTime ASC,  Money DESC' 

 

否则不能正确运行


 

posted on   Fenrir  阅读(1077)  评论(2编辑  收藏  举报

编辑推荐:
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
阅读排行:
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· [AI/GPT/综述] AI Agent的设计模式综述

导航

< 2008年8月 >
27 28 29 30 31 1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
31 1 2 3 4 5 6
点击右上角即可分享
微信分享提示