博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
sql 分页常见做法
阅读量:5147 次
发布时间:2019-06-13

本文共 1366 字,大约阅读时间需要 4 分钟。

set ANSI_NULLS ON

set QUOTED_IDENTIFIER ON
go
ALTER PROCEDURE [dbo].[PROCE_SQL2005PAGECHANGE]
(
@TableName varchar(50),            --表名
@ReFieldsStr varchar(200) = '*',   --字段名(全部字段为*)
@OrderString varchar(200),         --排序字段(必须!支持多字段不用加order by)
@WhereString varchar(500) =N'',  --条件语句(不用加where)
@PageSize int,                     --每页多少条记录
@PageIndex int = 1 ,               --指定当前为第几页
@TotalRecord int output            --返回总记录数
)
AS
BEGIN
--处理开始点和结束点
Declare @StartRecord int;
Declare @EndRecord int; 
Declare @TotalCountSql nvarchar(500); 
Declare @SqlString nvarchar(2000);    
set @StartRecord = (@PageIndex-1)*@PageSize + 1
set @EndRecord = @StartRecord + @PageSize - 1
SET @TotalCountSql= N'select @TotalRecord = count(*) from ' + @TableName;--总记录数语句
SET @SqlString = N'(select row_number() over (order by '+ @OrderString +') as rowId,'+@ReFieldsStr+' from '+ @TableName;--查询语句
--
IF (@WhereString! = '' or @WhereString!=null)
BEGIN
SET @TotalCountSql=@TotalCountSql + '  where '+ @WhereString;
SET @SqlString =@SqlString+ '  where '+ @WhereString;            
END
--第一次执行得到
--IF(@TotalRecord is null)
--   BEGIN
EXEC sp_executesql @totalCountSql,N'@TotalRecord int out',@TotalRecord output;--返回总记录数
--  END
----执行主语句
set @SqlString ='select * from ' + @SqlString + ') as t where rowId between ' + ltrim(str(@StartRecord)) + ' and ' + ltrim(str(@EndRecord));
Exec(@SqlString)    
END

转载于:https://www.cnblogs.com/yexinw/archive/2011/04/12/2014258.html

你可能感兴趣的文章
thinkphp5省市区三级联动例子
查看>>
让HttpClient不要打印巨多的日志
查看>>
洛谷 [P1024]一元三次方程求解
查看>>
MVC MODEL Attribute 操纵速记
查看>>
wcf服务端代码方式及客户端代码方式
查看>>
电商测试环境Jenkins multibranch pipeline实践
查看>>
Android--sos闪光灯
查看>>
关于Google App Engine
查看>>
场和帧的 关系(转)
查看>>
verilog 有符号数(2转)
查看>>
JS命名空间、对象封装
查看>>
自定义HttpFilter模块完善
查看>>
编码上的小改进
查看>>
Conda常见命令
查看>>
【动态规划】Codeforces 706C Hard problem
查看>>
1.4.1 Arithmetic Progressions
查看>>
React Native安装步骤
查看>>
数据转换服务-文本抽出技术
查看>>
GPS导航仪常见术语解释
查看>>
实验七
查看>>