MSSQL2000分页方案
(0 votes)文章地址:http://www.codeproject.com/KB/database/kuuy_P_CustomPaging.aspx
ALTER PROCEDURE [dbo].[kuuy_P_CustomPaging]
@getFields NVARCHAR(500)='', --Columns_Name
@tblName NVARCHAR(255)='', --Table_Name
@strWhere NVARCHAR(1500)='', --Conditons
@strOrder NVARCHAR(1000)='NewsID',--Order
@keyName NVARCHAR(50)='NewsID', --KeyName
@oprateKeyValue VARCHAR(2)='>', --Oprate
@funKeyValue NVARCHAR(100)='MAX(NewsID)', --Identity The Order Key value
@IsCount BIT=0, --Identity Whether Return The Total Results
@PageSize INT=10, --RowsCount You Want Fetch Onece
@CurrentPage INT=1, --CurrentPage
@ItemCount INT=0 OUTPUT
AS
DECLARE @strSQL NVARCHAR(4000) --Dynamic SQL string
DEClARE @strTmp NVARCHAR(2000) --TEMP SQL String
DECLARE @ItemCountValue INT
DECLARE @strCount NVARCHAR(4000) --Total Records
IF (@strOrder <> '') --排序字段
SET @strOrder = ' ORDER BY '+@strOrder
IF(@strWhere <> '') --筛选字段
BEGIN
IF(@CurrentPage > 1) --当前页
SET @strWhere =' AND '+@strWhere
ELSE
SET @strWhere =' WHERE '+@strWhere
END
IF (@IsCount <> 0)
SET @strCount = ' SET @ItemCount=(SELECT COUNT(*) FROM '+@tblName+@strWhere+')'
ELSE
SET @strCount =''
IF(@CurrentPage > 1)
BEGIN
SET @strTmp='(SELECT TOP '+str(@CurrentPage*@PageSize)+' '+@keyName+' FROM '+@tblName+@strWhere+@strOrder+') AS T_Orders'
SET @strSQL = 'SELECT TOP '+str(@PageSize)+' '+str((@CurrentPage-1)*@PageSize) + 'AS RowNum,'+@getFields+' '+
'FROM '+@tblName + ' '+
'WHERE '+ @keyName + @oprateKeyValue +
'(SELECT ' + @funKeyValue + ' FROM (SELECT TOP ' + str((@CurrentPage-1)*@PageSize) + ' * FROM '+
@strTmp+') AS T)'+
@strWhere+@strOrder+@strCount
END
ELSE
SET @strSQL = 'SELECT TOP '+str(@PageSize)+' ' + str((@CurrentPage-1)*@PageSize) + 'AS RowNum,' +@getFields+' FROM '+@tblName+@strWhere+@strOrder+@strCount
EXEC sp_executesql @strSQL,N'@ItemCount INT OUTPUT',@ItemCount=@ItemCountValue OUTPUT
PRINT @strSQL
SET @ItemCount = @ItemCountValue
RETURN
网友评论
共(0)条评论- 评论加载中……