信息交流、传播、提炼

nice to meet you

博客园 首页 新随笔 联系 订阅 管理


代码一:

CREATE proc P_GetPagerDataList 
@a_TableList Varchar(200), --要查询的字段
@a_TableName Varchar(30), --要查询的表名
@a_SelectWhere Varchar(500), --查询限制条件
@a_SelectOrderId Varchar(20), --查询主键
@a_SelectOrder Varchar(50), --排序字段
@a_intPageNo int
@a_intPageSize int
as 
/**//*定义局部变量*/ 
declare @intBeginID int 
declare @intEndID int 
declare @intRootRecordCount int 
declare @intRowCount int  
declare @RecordCount int 
declare @TmpSelect NVarchar(600
/**//*关闭计数*/ 
set nocount on 

/**//*求总记录数*/ 
select @TmpSelect='set nocount on;select @SPintRootRecordCount = count(*) from '+@a_TableName+' '+@a_SelectWhere 
execute sp_executesql @TmpSelect,N'@SPintRootRecordCount int OUTPUT',@SPintRootRecordCount=@intRootRecordCount OUTPUT 

select @RecordCount=@intRootRecordCount 

/**//*判断页数是否正确*/ 
if (@a_intPageNo-1)*@a_intPageSize>@intRootRecordCount 
return (-1

/**//*求开始rootID*/ 
set @intRowCount=(@a_intPageNo-1)*@a_intPageSize+1 
/**//*限制条数*/ 

select @TmpSelect='set nocount on;set rowcount @SPintRowCount;select @SPintBeginID='+@a_SelectOrderId+' from '+@a_TableName+' '+@a_SelectWhere+' '+@a_SelectOrder 
execute sp_executesql @TmpSelect,N'@SPintRowCount int,@SPintBeginID int OUTPUT',@SPintRowCount=@intRowCount,@SPintBeginID=@intBeginID OUTPUT 

/**//*结束rootID*/ 
set @intRowCount=@a_intPageNo*@a_intPageSize 
/**//*限制条数*/ 

select @TmpSelect='set nocount on;set rowcount @SPintRowCount;select @SPintEndID = '+@a_SelectOrderId+' from '+@a_TableName+' '+@a_SelectWhere+' '+@a_SelectOrder 
execute sp_executesql @TmpSelect,N'@SPintRowCount int,@SPintEndID int OUTPUT',@SPintRowCount=@intRowCount,@SPintEndID=@intEndID OUTPUT 

if @a_SelectWhere='' or @a_SelectWhere IS NULL 
select @TmpSelect='set nocount off;set rowcount 0;select '+@a_TableList+' from '+@a_TableName+' where '+@a_SelectOrderId+' between ' 
else 
select @TmpSelect='set nocount off;set rowcount 0;select '+@a_TableList+' from '+@a_TableName+' '+@a_SelectWhere+' and '+@a_SelectOrderId+' between ' 

if @intEndID>@intBeginID 
select @TmpSelect=@TmpSelect+'@SPintBeginID and @SPintEndID'+' '+@a_SelectOrder 
else 
select @TmpSelect=@TmpSelect+'@SPintEndID and @SPintBeginID'+' '+@a_SelectOrder 

select @RecordCount
execute sp_executesql @TmpSelect,N'@SPintEndID int,@SPintBeginID int',@SPintEndID=@intEndID,@SPintBeginID=@intBeginID

go

代码二:
CREATE proc P_GetPagerDataList 
@a_TableList Varchar(200), --要查询的字段
@a_TableName Varchar(30), --要查询的表名
@a_SelectWhere Varchar(500), --查询限制条件
@a_SelectOrderId Varchar(20), --查询主键
@a_SelectOrder Varchar(50), --排序字段
@a_intPageNo int
@a_intPageSize int
@RecordCount int OUTPUT 
as 
/**//*定义局部变量*/ 
declare @intBeginID int 
declare @intEndID int 
declare @intRootRecordCount int 
declare @intRowCount int 
declare @TmpSelect NVarchar(600
/**//*关闭计数*/ 
set nocount on 

/**//*求总记录数*/ 

select @TmpSelect='set nocount on;select @SPintRootRecordCount=count(*) from '+@a_TableName+' '+@a_SelectWhere 
execute sp_executesql @TmpSelect,N'@SPintRootRecordCount int OUTPUT',@SPintRootRecordCount=@intRootRecordCount OUTPUT 

select @RecordCount=@intRootRecordCount 

if @intRootRecordCount=0 --如果无匹配数据,则返回零 
return 0 

/**//*判断页数是否正确*/ 
if (@a_intPageNo-1)*@a_intPageSize>@intRootRecordCount 
return (-1

/**//*求开始rootID*/ 
set @intRowCount=(@a_intPageNo-1)*@a_intPageSize+1 
/**//*限制条数*/ 

select @TmpSelect='set nocount on;set rowcount @SPintRowCount;select @SPintBeginID='+@a_SelectOrderId+' from '+@a_TableName+' '+@a_SelectWhere+' '+@a_SelectOrder 
execute sp_executesql @TmpSelect,N'@SPintRowCount int,@SPintBeginID int OUTPUT',@SPintRowCount=@intRowCount,@SPintBeginID=@intBeginID OUTPUT 

/**//*结束rootID*/ 
set @intRowCount=@a_intPageNo*@a_intPageSize 
/**//*限制条数*/ 

select @TmpSelect='set nocount on;set rowcount @SPintRowCount;select @SPintEndID='+@a_SelectOrderId+' from '+@a_TableName+' '+@a_SelectWhere+' '+@a_SelectOrder 
execute sp_executesql @TmpSelect,N'@SPintRowCount int,@SPintEndID int OUTPUT',@SPintRowCount=@intRowCount,@SPintEndID=@intEndID OUTPUT 

if @a_SelectWhere='' or @a_SelectWhere IS NULL 
select @TmpSelect='set nocount off;set rowcount 0;select '+@a_TableList+' from '+@a_TableName+' where '+@a_SelectOrderId+' between ' 
else 
select @TmpSelect='set nocount off;set rowcount 0;select '+@a_TableList+' from '+@a_TableName+' '+@a_SelectWhere+' and '+@a_SelectOrderId+' between ' 

if @intEndID>@intBeginID 
select @TmpSelect=@TmpSelect+'@SPintBeginID and @SPintEndID'+' '+@a_SelectOrder 
else 
select @TmpSelect=@TmpSelect+'@SPintEndID and @SPintBeginID'+' '+@a_SelectOrder 

execute sp_executesql @TmpSelect,N'@SPintEndID int,@SPintBeginID int',@SPintEndID=@intEndID,@SPintBeginID=@intBeginID 

return(@@rowcount
--select @@rowcount 

GO

 

代码三:

 

-- 获取指定页的数据 
Create PROCEDURE pagination
    
@tblName varchar(255), -- 表名 
    @strGetFields varchar(1000= '*'-- 需要返回的列 
    @fldName varchar(255)=''-- 排序的字段名 
    @PageSize int = 10-- 页尺寸 
    @PageIndex int = 1-- 页码 
    @doCount bit = 0-- 返回记录总数, 非 0 值则返回 
    @OrderType bit = 0-- 设置排序类型, 非 0 值则降序 
    @strWhere varchar(1500= '' -- 查询条件 (注意: 不要加 where) 
AS 

declare @strSQL varchar(5000-- 主语句 
declare @strTmp varchar(110-- 临时变量 
declare @strOrder varchar(400-- 排序类型 
if @doCount != 0 
    
begin 
        
if @strWhere !='' 
            
set @strSQL = "select count(*as Total from [" + @tblName + "] where "+@strWhere 
        
else 
            
set @strSQL = "select count(*as Total from [" + @tblName + "]
    
end 
    
--以上代码的意思是如果@doCount传递过来的不是0,就执行总数统计。以下的所有代码都是@doCount为0的情况 

else 
    
begin 
        
if @OrderType != 0 
            
begin 
                
set @strTmp = "<(select min
                
set @strOrder = " order by [" + @fldName +"] desc
                
--如果@OrderType不是0,就执行降序,这句很重要! 
            end 
        
        
else 
            
begin 
                
set @strTmp = ">(select max
                
set @strOrder = " order by [" + @fldName +"] asc
            
end 
            
if @PageIndex = 1 
                
begin 
                    
if @strWhere != '' 
                        
set @strSQL = "select top " + str(@PageSize+" "+@strGetFields+ " from [" + @tblName + "] where " + @strWhere + " " + @strOrder 
                    
else 
                        
set @strSQL = "select top " + str(@PageSize+" "+@strGetFields+ " from ["+ @tblName + "] "+ @strOrder 
                        
--如果是第一页就执行以上代码,这样会加快执行速度 
                end 
            
else 
                
begin 
                    
--以下代码赋予了@strSQL以真正执行的SQL代码 
                    set @strSQL = "select top " + str(@PageSize+" "+@strGetFields+ " from [
                        + @tblName + "
] where [" + @fldName + "]+ @strTmp + "(["+ @fldName + "]from (select top " + str((@PageIndex-1)*@PageSize+ " ["+ @fldName + "] from [" + @tblName + "]+ @strOrder + ") as tblTmp)"+ @strOrder 
                        
if @strWhere != '' 
                    
set @strSQL = "select top " + str(@PageSize+" "+@strGetFields+ " from [
                        + @tblName + "
] where [" + @fldName + "]+ @strTmp + "([
                        + @fldName + "
]from (select top " + str((@PageIndex-1)*@PageSize+ " [
                        + @fldName + "
] from [" + @tblName + "] where " + @strWhere + " " 
                        
+ @strOrder + ") as tblTmp) and " + @strWhere + " " + @strOrder 
    
end 
end 


exec (@strSQL)
GO
posted on 2008-04-22 18:54  seeyou  阅读(182)  评论(0编辑  收藏  举报