create PROCEDURE [dbo].[GetRecordFromPage]
@Tables varchar(1000), 
@PK varchar(100),    
@Sort varchar(200= ''
@PageNumber int = 1,    
@PageSize int = 10,        
@Fields varchar(1000= '*',
@Filter varchar(1000= NULL,
@Group varchar(1000= NULL,  
@isCount bit = 0     
AS
if @Fields = '' 
  
set @Fields='*'
--

DECLARE @strFilter varchar(2000)
declare @sql varchar(8000)
IF @Filter IS NOT NULL AND @Filter != ''
  
BEGIN
   
SET @strFilter = ' WHERE ' + @Filter + ' '
  
END
ELSE
  
BEGIN
   
SET @strFilter = ''
  
END

if @isCount = 1 
    
begin
        
set @sql = 'SELECT  Count(*) FROM ' + @Tables + @strFilter  
    
end
else
begin
if @Sort = ''
  
set @Sort = @PK + ' DESC '

IF @PageNumber < 1
  
SET @PageNumber = 1

if @PageNumber = 1 
begin 
  
set @sql = 'select top ' + str(@PageSize+' '+@Fields+ '  from ' + @Tables + ' ' + 

@strFilter + ' ORDER BY  '+ @Sort
end 
else
  
begin
 
   
DECLARE @START_ID varchar(50)
DECLARE @END_ID varchar(50)
SET @START_ID = convert(varchar(50),(@PageNumber - 1* @PageSize + 1)
SET @END_ID = convert(varchar(50),@PageNumber * @PageSize)
    
set @sql =  ' SELECT '+@Fields+ '
   FROM (SELECT ROW_NUMBER() OVER(ORDER BY 
'+@Sort+') AS rownum, 
     
'+@Fields+ '
      FROM 
'+@Tables+') AS D
   WHERE rownum BETWEEN 
'+@START_ID+' AND ' +@END_ID +' ORDER BY '+@Sort
  
END

END


EXEC(@sql)
posted on 2008-06-13 11:08  个性小资  阅读(116)  评论(0)    收藏  举报