alter PROCEDURE [dbo].[CommonPage]( 
    @tblName      varchar(255),--表名       
    @OrderName      varchar(20),--主键,排序 
    @FldName        varchar(255)='*',  --显示的字段  
    @PageSize     int = 10,    --页码       
    @PageIndex    int = 1,     --当前页       
    @OrderType    bit = 0,     --排序类型 
    @strWhere     varchar(2000) = '' --查询条件
 )       
AS 
declare @rowCount int 
declare @strSQL   nvarchar(3000)        
declare @strTmp   varchar(1000)        
declare @strOrder varchar(500)         
if @OrderType != 0 
begin 
    set @strTmp = '<(select min' 
    set @strOrder = ' order by [' + @OrderName + '] desc' 
end 
else 
begin 
    set @strTmp = '>(select max' 
    set @strOrder = ' order by [' + @OrderName +'] asc' 
end  
set @strSQL = 'select top ' + str(@PageSize) + @FldName+' from [' 
    + @tblName + '] where [' + @OrderName + ']' + @strTmp + '([' 
    + @OrderName + ']) from (select top ' + str((@PageIndex-1)*@PageSize) + ' [' 
    + @OrderName + '] from [' + @tblName + ']' + @strOrder + ') as tblTmp)' 
    + @strOrder  
if @strWhere != '' 
    set @strSQL = 'select top ' + str(@PageSize) + @FldName+' from [' 
        + @tblName + '] where [' + @OrderName + ']' + @strTmp + '([' 
        + @OrderName + ']) from (select top ' + str((@PageIndex-1)*@PageSize) + ' [' 
        + @OrderName + '] from [' + @tblName + '] where ' + @strWhere + ' ' 
        + @strOrder + ') as tblTmp) and ' + @strWhere + ' ' + @strOrder 
if @PageIndex = 1 
begin 
    set @strTmp = '' 
    if @strWhere != '' 
        set @strTmp = ' where (' + @strWhere + ')' 
 
    set @strSQL = 'select top ' + str(@PageSize) + @FldName+' from [' 
        + @tblName + ']' + @strTmp + ' ' + @strOrder 
end 

if @strWhere!=''
set @strSQL =@strSQL+ ' select @total=count(*) from [' + @tblName + '] where '+@strWhere
else
set @strSQL =@strSQL+ ' select @total=count(*) from [' + @tblName + ']'

--print @strSQL
exec sp_executesql @strSQL,N'@total int output',@rowCount output
GO

 posted on 2008-12-01 16:13  隔山打牛  阅读(108)  评论(0)    收藏  举报