CREATE PROCEDURE [dbo].[usp_DividePage]
@C_Name varchar(20),
@tblName varchar(255)='RestaurantInfo', -- 表名
@strGetFields varchar(1000) = '*', -- 需要返回的列 
@fldName varchar(255)='RI_ID', -- 排序的字段名
@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) -- 排序类型
DECLARE @strWhere1 NVARCHAR(2000)
set @strWhere1 ='CONTAINS(RI_StandbyOne,'''+@C_Name+''') or CONTAINS(RI_Address,'''+ @C_Name+ ''') or CONTAINS(RI_RIName,''' + @C_Name+ ''')'
SET @strWhere=@strWhere1
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 
print @strSQL
exec (@strSQL)
GO
这是我的存储过程
我传进去参数查询的话
usp_DividePage 谈固,'RestaurantInfo','*','RI_ID',1,1,0,0
这是查询第一页的数据
usp_DividePage 谈固,'RestaurantInfo','*','RI_ID',1,2,0,0
这是查询第二页的数据
1 食尚网_1 287728858 123 张三 男 123
2 澳门豆捞_5 123 123 张三 男 123
60 654奥迪——+ 6655448975 555555 的啊
61 楚凤楼 chuchu 111111 楚楚
97 中转站 啊谁大时代 123123 啊飒飒的
103 嘉庭美食制造 佳佳 jiajia 佳佳
131 三品轩休闲吧 ffff ffffff ffffffff
150 石家庄清水茶舍 02 0000 002
151 自由天空咖啡屋 03 0000 003
152 03 0000 003
但是两个返回的数据都是前十条
这是为什么啊