| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 598 人关注过本帖
标题:求 存储过程分页
只看楼主 加入收藏
smyh
Rank: 2
等 级:论坛游民
帖 子:97
专家分:25
注 册:2007-1-1
结帖率:80%
收藏
 问题点数:0 回复次数:0 
求 存储过程分页
下面这个存储过程不支持任意单个字段排序,可是我想弄个多字段的!!就是弄不出来,哪个高手帮忙看看!
alter PROCEDURE GetRecordFromPage  
    @tblName varchar(500), -- 需要查询的表名
    @fldName varchar(50),  --主键字段名
    @listFldName varchar(255),        --需要查询的字段
    @orderFldName varchar(50),         --需要排序的字段
    @orderFldType varchar(50),        --需要排序的字段的类型
    @PageSize     int = 10,            
    @PageIndex    int = 1,              
    @OrderType    bit = 1,              
    @strWhere     varchar(2000) = ''   
AS  
declare @strSQL   nvarchar(4000)       -- 主语句  
declare @strTmp   varchar(1000)       -- 临时变量  
declare @strOrder varchar(500)        -- 排序类型  
declare @strOrder2 varchar(500)       --   
declare @orderFldValue nvarchar(100)  --排序字段对应的值   
declare @keyFldValue nvarchar(100)  --主键字段对应的值 add  
declare @operator char(1) --add by caoy  
declare @tempValueSql varchar(100)  
declare @strOrderby varchar(5)  
if (@orderFldType='float')  
    set @tempValueSql='cast(@orderFldValue as float)'  
else  
    set @tempValueSql='@orderFldValue'  

--获取表明 。  
declare @tablename varchar(20)  
if charindex('.',@orderFldName)>1   
    set @tablename=left(@orderFldName,charindex('.',@orderFldName)-1)  
else  
    set @tablename=@orderFldName  
if @OrderType != 0   
begin  
    set @operator='<'  
    set @strOrderby=' desc'  
    set @strOrder2=' asc'  
end  
else  
begin  
    set @operator='>'  
    set @strOrderby=' asc'  
    set @strOrder2=' desc'  
end  
set @strOrder=' order by '+ @orderFldName+@strOrderby  
if @fldName!=@orderFldName  --如果排序字段不是主键字段,则增加主键排序  
    set @strOrder=@strOrder+','+@fldName+@strOrderby  
--先得到orderFldValue和keyValue   
set @strSQL='select top 1 @orderFldValue=convert(nvarchar(100),'+@orderFldName+',20)'  /***注意,如果需要排序的字段的值长度超过Nvarchar(100),请修改此处***********/  
if @fldName!=@orderFldName   
    set @strSQL=@strSQL+',@keyFldValue='+@fldName  
else  
    set @strSQL=@strSQL+',@keyFldValue=1'  
set @strSQL=@strSQL+' from (select top ' + str((@PageIndex-1)*@PageSize) + ' '  
    + @orderFldName   
if @fldName!=@orderFldName  --add by caoy  
    set @strSQL=@strSQL+','+@fldName  
set @strSQL=@strSQL+ ' from ' + @tblName + ''   
if @strWhere != ''  
    set @strSQL=@strSQL+ ' where '+@strWhere  
set @strSQL=@strSQL+ @strOrder + ') as '+@tablename+' order by ' + @orderFldName +@strOrder2  
if @fldName!=@orderFldName  --add by caoy  
    set @strSQL=@strSQL+',' + @fldName +@strOrder2  
--print @strSQL  
exec   sp_executesql @strSQL,N'@orderFldValue nvarchar(100) output,@keyFldValue nvarchar(100) output',@orderFldValue output,@keyFldValue output    /***注意,如果需要排序的字段的值长度超过Nvarchar(100),请修改此处***********/   
--得到排序字段值和主键值结束  



if @PageIndex = 1  
begin  
    set @strTmp = ''  
    if @strWhere != ''  
        set @strTmp = ' where (' + @strWhere + ')'  

    set @strSQL = 'select top ' + str(@PageSize) + ' '+ @listFldName+' from '  
        + @tblName + '' + @strTmp + ' ' + @strOrder  
    exec (@strSQL)  
end  
else  
begin   
    --取得top数据并返回  
    set @strSQL = N'select top ' + str(@PageSize) +' ' +  @listFldName+' from '  
        + @tblName + ' where ('+@orderFldName+@operator+@tempValueSql+' and @keyFldValue=@keyFldValue'  
    if @fldName!=@orderFldName  --add by caoy  
        set @strSQL=@strSQL+ ' or ('+@orderFldName+'='+@tempValueSql+' and '+@fldName+@operator+'@keyFldValue)) and (1=1'  
      
    if @strWhere != ''  
        set @strSQL=@strSQL+' and ' + @strWhere  
    set @strSQL=@strSQL+ ')'+@strOrder  
        if @fldName=@orderFldName           
        set @keyFldValue=1  
    --print @strSQL  
    exec sp_executesql @strSQL,N'@orderFldValue nvarchar(100),@keyFldValue nvarchar(100)',@orderFldValue,@keyFldValue  

      
end  

SET QUOTED_IDENTIFIER OFF  
GO
2008-04-07 10:18
快速回复:求 存储过程分页
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.022114 second(s), 10 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved