扩展性很好的一个分页存储过程分享


这是经常用的一个分页存储过程 希望大家指点不足

复制代码 代码如下:

USE [a6756475746]
GO
/****** Object: StoredProcedure [dbo].[tbl_order_SearchWhereAndPage] Script Date: 11/01/2011 09:37:39 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [dbo].[tbl_order_SearchWhereAndPage]
@AllCount int OUTPUT,
@PageIndex int,
@PageSize int ,
@minDate datetime,
@maxDate datetime
AS
begin
DECLARE @PageLower int
set @PageLower=@PageSize * @PageIndex
DECLARE @PageUpper int
set @PageUpper= @PageLower + @PageSize - 1

DECLARE @SearchSQL nvarchar(4000)
set @SearchSQL='SELECT * ,( ROW_NUMBER() OVER (ORDER BY [ID] DESC) -1 ) AS RowNumber FROM tbl_order WHERE (1=1) '
DECLARE @SearchSQLCount nvarchar(4000)
set @SearchSQLCount='SELECT @count=Count(*) FROM tbl_order WHERE (1=1) '
declare @Result [varchar](5000)
set @Result=''

if @minDate>convert(datetime,'1900-1-2')
begin
set @Result=@Result+' and oDeliveryDate >= '''+convert(varchar(20),@minDate)+''''
end
if @maxDate > convert(datetime,'1900-1-2')
begin
set @Result=@Result+' and oDeliveryDate <= '''+convert(varchar(20),dateadd(dd,1,@maxDate))+''''
end
set @SearchSQLCount=@SearchSQLCount+@Result
set @SearchSQL=@SearchSQL+@Result

SET @SearchSQL = 'WITH t AS (' + @SearchSQL +' )
SELECT * FROM t
WHERE [RowNumber] BETWEEN '+ convert(varchar(50),@PageLower) +' AND '+ convert(varchar(50),@PageUpper) + '
ORDER BY RowNumber '

exec (@SearchSQL)

exec sp_executesql @SearchSQLCount ,N'@count as int out' ,@AllCount out

print @SearchSQL

print @AllCount
end
exec (@Result)



相关阅读:
原创]用javascript实现检测指定目录是否存在的方法" target="_blank">[原创]用javascript实现检测指定目录是否存在的方法
基于文本的留言簿
Linux下用Samba作PDC配置方法
my.cnf
php 和 mysql 开发的 8 个技巧
Session对象之Abandon方法
如何编写远程登陆MOSS的代码
用apply让javascript函数仅执行一次的代码
CSS中右对齐float:right换行的解决办法
微软向XP盗版下手 非验证将受到“黑屏”警告
dede增加批量删除采集内容的方法
脚本吧 - 幻宇工作室用到js,超强推荐share.js
AJAX 弄潮Web 2.0 在线Office项目复活
PHP日期处理函数 整型日期格式
快速导航

Copyright © 2016 phpStudy |