一CREATE PROCEDURE dbo.PrGetOrderListByPage
@TableName nvarchar(30),
@PageIndex int,
@PageSize int,
AS
DECLARE @SQL VARCHAR(8000)
SET @SQL='SELECT TOP ('+LTRIM(@PageSize)+') * FROM '+ @TableName + ' WHERE FSysId > 
(SELECT MAX (FSysId) FROM (SELECT TOP (('+LTRIM(@PageIndex)+'-1)*'+LTRIM(@PageSize)+') FSysId 
From '+ @TableName + ' ORDER BY FSysId) AS T) ORDER BY FSysId'
EXEC(@SQL)


二CREATE PROCEDURE [dbo].[PrGetPagingData]
@TableName AS NVARCHAR(50),
@PageSize AS INT,
@CurPage AS INT,
@TotalRecordCount AS INT OUTPUT 
AS
CREATE TABLE #temp
(
[id] INT IDENTITY(1,1) ,
[fid] INT
)
DECLARE @Sql AS NVARCHAR(500)
SET @Sql = 'SELECT [FsysId] FROM [dbo].[' + @TableName + ']'INSERT #temp 
EXEC SP_EXECUTESQL @Sql DECLARE @Step AS INT
SET @Step = @PageSize * ( @CurPage - 1 ) + 1SET @Sql = 'SELECT a.* FROM [dbo].[' + @TableName + '] a INNER JOIN #temp b 
ON (b.id >= ' + CAST(@Step AS NVARCHAR(10)) + ' AND b.id < ' + CAST(@Step AS NVARCHAR(10)) 
+ ' + ' + CAST(@PageSize AS NVARCHAR(10)) + ' ) AND a.[FSysId] = b.[fid]'EXEC SP_EXECUTESQL @SqlSELECT @TotalRecordCount = COUNT(*) FROM #tempDROP TABLE #temp可用分 444分 这个数字太不吉利~

解决方案 »

  1.   

    海量数据库的查询优化及分页算法方案随着“金盾工程”建设的逐步深入和公安信息化的高速发展,公安计算机应用系统被广泛应用在各警种、各部门。与此同时,应用系统体系的核心、系统数据的存放地――数据库也随着实际应用而急剧膨胀,一些大规模的系统,如人口系统的数据甚至超过了1000万条,可谓海量。那么,如何实现快速地从这些超大容量的数据库中提取数据(查询)、分析、统计以及提取数据后进行数据分页已成为各地系统管理员和数据库管理员亟待解决的难题。http://www.delphibbs.com/keylife/iblog_show.asp?xid=13224