通用分页存储过程

介绍了一个高效的万能分页程序,适用于SQL Server数据库环境。该程序可通过输入索引页、每页数量等参数来实现数据分页,并支持排序、分组等功能。此外,程序还提供错误信息输出及总页数、总记录数的计算。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

/*----------------------------------------------------------------------------------
--   名稱 :Pro_CommonPager
--   功能說明:萬能分頁程序
--   輸入資料:
  @PageIndex int,--索引页 1
  @PageSize int,--每页数量2
  @TableName nvarchar(500),--查询表名3
  @Order  nvarchar(500),--排序的列4
  @SelectStr nvarchar(500) = '*',--查询的列5
  @WhereCondition Nvarchar(1000)='',--查询条件6
  @OrderType bit = 0, -- 设置排序类型, 非 0 值则降序 7
  @Groupby NVarChar(100) = '' ,--分組 8
--   輸出資料: 
  @RecordCount int = -1 out,--总行数9
  @PageCount int = -1 out,--总页数10
  @error nvarchar(100)='' out --錯誤信息11
--   注意事項:exec Pro_CommonPager 5000,15,'[User]','Id'
  本程序本摘自網上﹐經過修改﹐提高了它的效率。
--   原設計者:Achieve
--   設立日期:2008/05/15
--   ------------------------ 異動紀錄明細 -------------------------------
--   異動日期 異動者  異  動  原  因
--  2008/05/25 me  发现了一另外一种计算总行数的方法,这种方法应该还是比临时表快
    EXEC SP_EXECUTESQL @strTmp,N'@RecordCount int output',@RecordCount output
-----------------------------------------------------------------------------------*/
CREATE   PROCEDURE [dbo].[Pro_CommonPager]
(
@PageIndex int,--索引页 1
@PageSize int,--每页数量2
@TableName nvarchar(500),--查询表名3
@Order  nvarchar(500),--排序的列4
@SelectStr nvarchar(500) = '*',--查询的列5
@WhereCondition Nvarchar(1000)='',--查询条件6
@OrderType bit = 0, -- 设置排序类型, 非 0 值则降序 7
@Groupby NVarChar(100) = '' ,--分組 8
@RecordCount int=-1 output,--总行数 9
@PageCount int=-1 output,--总页数10
@error nvarchar(100)='' output --錯誤信息11
)
AS 
declare @strSQL nvarchar(2000) -- 主语句 
declare @strTmp nvarchar(1000) -- 临时变量 
declare @strOrder nvarchar(1000) -- 排序类型 
if @OrderType != 0 
begin 
 set @strTmp = '<(select min' 
 set @strOrder = ' order by ' + @Order +' desc' 
end 
else 
begin 
 set @strTmp = '>(select max' 
 set @strOrder = ' order by ' + @Order +' asc' 
end 

set @strSQL = 'select top ' + str(@PageSize) + ' ' + @SelectStr + ' from ' 
 + @TableName + ' where ' + @Order + '' + @strTmp + '([' 
 + @Order + ']) from (select top ' + str((@PageIndex-1)*@PageSize) + ' [' 
 + @Order + '] from ' + @TableName + '' + @strOrder + ') as tblTmp)' 
 + @Groupby + @strOrder 
if @WhereCondition != '' 
 set @strSQL = 'select top ' + str(@PageSize) + ' ' + @SelectStr + ' from ' 
  + @TableName + ' where ' + @Order + '' + @strTmp + '([' 
  + @Order + ']) from (select top ' + str((@PageIndex-1)*@PageSize) + ' [' 
  + @Order + '] from ' + @TableName + ' where (' + @WhereCondition + ') ' 
  + @strOrder + ') as tblTmp) and (' + @WhereCondition + ') ' + @Groupby + @strOrder 
if @PageIndex = 1 
begin 
 set @strTmp = '' 
 if @WhereCondition != '' 
  set @strTmp = ' where (' + @WhereCondition + ')' 
 set @strSQL = 'select top ' + str(@PageSize) + ' ' + @SelectStr + ' from ' 
  + @TableName + '' + @strTmp + ' ' + @Groupby + @strOrder 
end 
exec (@strSQL)
if(@@error<>0)
begin
 set @error='分頁數據出錯﹗';
 return;
end 
--print @strSQL
 --改進本業計算行數的方法﹐創建一個臨時表用于快速計算行數
 --create table  #tmp ( counts int );---創建臨時表
 --取得總記錄數
 IF @WhereCondition <>''
  Begin
   SET @strTmp = 'SELECT  @RecordCount=Count(*) FROM ' + @TableName + ' Where ' + (@WhereCondition)
  End
 ELSE
  Begin
   SET @strTmp = 'SELECT @RecordCount=Count(*) FROM ' + @TableName
  End
 EXEC SP_EXECUTESQL @strTmp,N'@RecordCount int output',@RecordCount output
 if(@@error<>0)
 begin
  set @error='分頁數據出錯﹗';
  --drop table #tmp;
  return;
 end 
 
 --select @RecordCount=counts from #tmp
 --SET @RecordCount = @@RowCount
  --    获取总页数
 --    "CEILING"函数:取得不小于某数的最小整数
 SET @PageCount = CEILING(@RecordCount * 1.0 / @PageSize)

 if(@@error<>0)
 begin
  set @error='分頁數據出錯﹗';
  --drop table #tmp;
 end 
 return

GO

 

资源下载链接为: https://pan.quark.cn/s/22ca96b7bd39 在 IT 领域,文档格式转换是常见需求,尤其在处理多种文件类型时。本文将聚焦于利用 Java 技术栈,尤其是 Apache POI 和 iTextPDF 库,实现 doc、xls(涵盖 Excel 2003 及 Excel 2007+)以及 txt、图片等格式文件向 PDF 的转换,并实现在线浏览功能。 先从 Apache POI 说起,它是一个强大的 Java 库,专注于处理 Microsoft Office 格式文件,比如 doc 和 xls。Apache POI 提供了 HSSF 和 XSSF 两个 API,其中 HSSF 用于读写老版本的 BIFF8 格式(Excel 97-2003),XSSF 则针对新的 XML 格式(Excel 2007+)。这两个 API 均具备读取和写入工作表、单元格、公式、样式等功能。读取 Excel 文件时,可通过创建 HSSFWorkbook 或 XSSFWorkbook 对象来打开相应格式的文件,进而遍历工作簿中的每个 Sheet,获取行和列数据。写入 Excel 文件时,创建新的 Workbook 对象,添加 Sheet、Row 和 Cell,即可构建新 Excel 文件。 再看 iTextPDF,它是一个用于生成和修改 PDF 文档的 Java 库,拥有丰富的 API。创建 PDF 文档时,借助 Document 对象,可定义页面尺寸、边距等属性来定制 PDF 外观。添加内容方面,可使用 Paragraph、List、Table 等元素将文本、列表和表格加入 PDF,图片可通过 Image 类加载插入。iTextPDF 支持多种字体和样式,可设置文本颜色、大小、样式等。此外,iTextPDF 的 TextRenderer 类能将 HTML、
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值