Welcome

首页 / 数据库 / SQLServer / 扩展性很好的一个分页存储过程分享

这是经常用的一个分页存储过程 希望大家指点不足
复制代码 代码如下:
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)