≡
  • 网络编程
  • 数据库
  • CMS技巧
  • 软件编程
  • PHP笔记
  • JavaScript
  • MySQL
位置:首页 > 数据库 > SQL Server

SQL Server 针对SQL 2000 的分页存储过程示例

人气:474 时间:2019-12-11

这篇文章主要为大家详细介绍了SQL Server 针对SQL 2000 的分页存储过程示例,具有一定的参考价值,可以用来参考一下。

感兴趣的小伙伴,下面一起跟随四海网的小编两巴掌来看看吧!

代码如下:


---------------------------------------------------- 
--针对SQL 2000 的分页存储过程 
--Time:2008-9-25 
---------------------------------------------------- 
ALTER PROCEDURE [dbo].[uoSp_RecordPager] 
--要分页显示的表名,可多表连查,但不能使用别名。 
--例:uo_Article LEFT JOIN uo_ArticleClass ON uo_Article.AClassID=uo_ArticleClass.ID 
@Table_info varchar(100), 

--用于定位记录的主键(惟一键)字段,可以是逗号分隔的多个字段 
@field_id nvarchar(1000), 

--要显示的页码 
@CurrentPage int=1, 

--每页的大小(记录数) 
@PageSize int=10, 

--以逗号分隔的要显示的字段列表,如果不指定,则为*。但多表联查时,若有同名字段,则必须显示指定要查的字段。 
--例:uo_Article.*,uo_ArticleClass.ClassName 
@Field_info nvarchar(1000), 

--以逗号分隔的排序字段列表,可以指定在字段后面指定DESC/ASC 用于指定排序顺序 
@Field_Order nvarchar(1000)= ' ', 

--查询条件 
@otherwhere nvarchar(1000)= ' ', 
@RecordCount int OUTPUT, --总行数 
@PageCount int OUTPUT, --总页数 
@SQLSTR nvarchar(2000) output 
AS 
SET NOCOUNT ON 

--分页字段检查 
IF ISNULL(@field_id,N' ')= ' ' 
BEGIN 
RAISERROR(N'分页处理需要主键(或者惟一键) ',1,16) 
RETURN 
END 

--其他参数检查及规范 
IF ISNULL(@PageSize,0) <1 SET @PageSize=10 
IF ISNULL(@Field_info,N' ')=N' ' SET @Field_info=N'* ' 
IF ISNULL(@Field_Order,N' ')=N' ' 
SET @Field_Order=N' ' 
ELSE 
SET @Field_Order=N'ORDER BY '+LTRIM(@Field_Order) 

IF ISNULL(@otherwhere,N' ')=N' ' 
SET @otherwhere=N' ' 
ELSE 
SET @otherwhere=N' WHERE ('+@otherwhere+N') ' 

--计算@RecordCount 
declare @sqlt nvarchar(1000) 
set @sqlt = 'SELECT @RecordCount = COUNT(' + @Field_id + ') FROM ' + @Table_Info + @otherwhere 
exec sp_executesql @sqlt,N'@RecordCount int output',@RecordCount output 

--如果@PageCount为NULL值,则计算总页数(这样设计可以只在第一次计算总页数,以后调用时,把总页数传回给存储过程,避免再次计算总页数,对于不想计算总页数的处理而言,可以给@PageCount赋值) 
IF @PageCount IS NULL 
BEGIN 
DECLARE @sql nvarchar(4000) 
SET @sql=N'SELECT @PageCount=COUNT(*) ' 
+N' FROM '+@Table_info 
+N' '+@otherwhere 
EXEC sp_executesql @sql,N'@PageCount int OUTPUT ',@PageCount OUTPUT 
SET @PageCount=(@PageCount+@PageSize-1)/@PageSize 
END 

IF ISNULL(@CurrentPage,0) <1 SET @CurrentPage=1 
IF @CurrentPage > @PageCount and @PageCount>0 SET @CurrentPage=@PageCount 

--第一页直接显示 
IF @CurrentPage = 1 
BEGIN 
SET @SQLSTR = N'SELECT TOP ' + str(@PageSize) +N' '+@Field_info +N' FROM '+@Table_info +N' '+@otherwhere +N' '+@Field_Order 
--PRINT @SQLSTR 
EXEC(@SQLSTR) 
END 
ELSE 
BEGIN 
---------------------------------------------------- 
--获取第一个表的表名 
DECLARE @FirstTableName varchar(20) 
SET @FirstTableName = @Table_info 
IF CHARINDEX(N',',@FirstTableName)>0 OR CHARINDEX(N'.',@FirstTableName)> 0 OR CHARINDEX(N' ',@FirstTableName)> 0 
BEGIN 
WHILE CHARINDEX(N',',@FirstTableName)> 0 
SELECT @FirstTableName=LEFT(@FirstTableName,CHARINDEX(N',',@FirstTableName)-1) 
WHILE CHARINDEX(N'.',@FirstTableName)> 0 
SELECT @FirstTableName=LEFT(@FirstTableName,CHARINDEX(N'.',@FirstTableName)-1) 
WHILE CHARINDEX(N' ',@FirstTableName)> 0 
SELECT @FirstTableName=LEFT(@FirstTableName,CHARINDEX(N' ',@FirstTableName)-1) 
END 

--构造SQL语句 
SET @SQLSTR = N'SELECT * FROM (' 
+ N' SELECT TOP '+STR(@PageSize*@CurrentPage) +N' '+ @Field_info + N' FROM '+@Table_info +N' '+@otherwhere +N' '+@Field_Order 
+ N') '+@FirstTableName+N' WHERE '+@field_id+N' NOT IN (' 
+ N' SELECT TOP '+STR(@PageSize*(@CurrentPage-1))+N' '+ @field_id + N' FROM '+@Table_info +N' '+@otherwhere +N' '+@Field_Order 
+ N') ' 
+ N' '+@Field_Order 
EXEC(@SQLSTR) 
---------------------------------------------------- 
END

本文来自:http://www.q1010.com/179/8083-0.html

注:关于SQL Server 针对SQL 2000 的分页存储过程示例的内容就先介绍到这里,更多相关文章的可以留意四海网的其他信息。

关键词:SQL SERVER

您可能感兴趣的文章

  • win2003安装sqlserver 2000提示无法验证产品密钥解析
  • SqlServer 基础知识 数据检索、查询排序语句
  • SQL Server利用sys.sysprocesses检查SqlServer的阻塞和死锁
  • SQLServer 全文检索(full-text)语法
  • SQL Server 2000 升级到 SQLServer 2008 性能之需要注意的地方之一
  • SQL Server 一次性压缩Sqlserver2005中所有库日志的存储过程
  • SQLServer 跨库查询实现方法
  • SQL Server 数据库主键的生成方式小结(sqlserver,mysql)
  • SQL Server使用cmd命令行窗口操作SqlServer的方法
  • SQLServer 2005 实现数据库同步备份 过程-结果-分析
上一篇:SQL Server 操作主从关系表的sql语句示例
下一篇:SQL Server SQL高级查询语句的简单示例
热门文章
  • SQL Server SQL获取第一条记录的方法
  • SQL Server出现System.OutOfMemoryException异常的解决方法
  • SQL Server的 update from 语句的简单示例
  • SQL Server 数据库备份方法菜鸟教程
  • SQL Server 多表关联时在where语句中慎用trim()方法
  • SQL Server数据类型及长度限制详细说明
  • mybaits非配置原因,导致SqlSession was not registered for synchronization异常解析
  • SQL Server 收缩后对数据库的使用有影响吗?
  • SQL Server 格式导致的Excel导入sql出现异常的解决方法
  • SQL Server 连接服务器出现错误 7391的解决方法
  • 最新文章
    • SQL Server存储过程基本语法的简单示例
    • sql查询时增加自动编号和分页的简单示例
    • sql轻松应付百万数据的高效数据分页存储过程的简单示例
    • sql获取一条数据中所有字段的名称和值的实现方法
    • sql分割函数的简单示例
    • SQL Server异常捕获的简单示例
    • SQL SERVER回滚恢复误操作数据的实现方法
    • SQL Server函数或存储过程中抛出异常的实现方法
    • SQL Server创建数据库的完整代码
    • SQL Server创建数据库的命令用法示例

四海网收集整理一些常用的php代码,JS代码,数据库mysql等技术文章。