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
但是两个返回的数据都是前十条
这是为什么啊
解决方案 »
- csv文件数据导入问题!
- 纯C++下如何连接SQL Server Campact 3.5数据库
- sql大容量插入几百万行的数据,文本内容显示乱码,且要去掉小数点。
- sql2005分区表的文件组里面文件的疑问?
- 如何获得表的记录在表中的行位置
- 哪们大侠帮帮忙,MSDE的命令行怎么用,小弟想把原sa用户名的密码改一下,怎么改!
- 很难的SQL语句,请高手帮忙看看?
- vfp能否对outlook进行操作,就象类似操作Excel那样赋值(填信件内容、加附件等)?
- 怎样将建立好的数据库安装到其他的SQL Server 2000上?
- 请教大家,我学做最简单的库存管理,如何计算库存呢?
- SQL Server 2005 错误日志求助!
- sql server重复值只显示一条
另外你传的@PageSize对应的值是1,也能查出10条数据?还是先把问题整理清楚吧。
其实PageSize是10
还有最后一个参数是条件
条件语句在下面声明的
我只要给条件语句传一个关键字就好了