注册 | 登录 忘记密码? 51cto首页 | 博客 | 论坛 | 招聘
热点文章 IB客座主编(四)美国西蒙公..
 帮助

存储过程分页(含带搜索等功能)


2007-08-29 08:22:53
版权声明:原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明。否则将追究法律责任。http://51xingfu.blog.51cto.com/219185/40173
分页参数用到的只有  
  @PageIndex INT,
   @PageSize  INT,
   @RecordCount INT OUT,
   @PageCount INT OUT,
  这4个,其他参数涉及到其他的功能,不做分析,看不懂的可以跟帖:
 
CREATE  PROCEDURE InforManage_HuaGong123
(
   @PageIndex INT,
   @PageSize  INT,
   @RecordCount INT OUT,
   @PageCount INT OUT,
   @channel NVarchar(10),
   @editor varchar(10),
   @lookUnpassed char(1),
   @lookOwn char(1),
   @is_yc bit,
   @keyword VARCHAR(100)
)    
AS
DECLARE @strSql NVARCHAR(4000) --Sql语句          
DECLARE @strColumn NVARCHAR(1000) --要查询的列
DECLARE @strFrom NVARCHAR(100) --表 
DECLARE @strOrder NVARCHAR(100) --第一页排序规则
DECLARE @strOrderIn NVARCHAR(100) --内层排序规则
DECLARE @strOrderOut NVARCHAR(100) --外层排序规则
DECLARE @strWhere NVARCHAR(1000) --查询条件
SET @strColumn = ' News_ID,News_Title,News_Date,Channel_Name,Column_Name,Class1_Name,Province,City,News_Edit,Click_Number,News_Weight,News_Verify '
SET @strFrom = ' FROM tb_News ' 
SET @strOrder = ' ORDER BY News_ID DESC '
SET @strOrderIn = ' ORDER BY News_ID ASC ) TempTable '
SET @strOrderOut = ' ORDER BY News_ID DESC ' 
if @lookOwn = ''
 SET @strWhere = ' WHERE Channel_Name = ' + '''' + @channel + ''''
else
 SET @strWhere = ' WHERE News_Edit = ' + '''' + @editor + ''''+ ' AND Channel_Name = '+ '''' + @channel + ''''
 
if @lookUnpassed <> ''
 SET @strWhere = @strWhere + ' AND News_Verify is null '
if @is_yc <>0
 SET @strWhere = @strWhere + ' AND IS_YC =1 '
IF @keyword <> ''
 SET @strWhere = @strWhere + ' AND News_Title LIKE ' +  '''' + @keyword + ''' '  
 

DECLARE @sql NVARCHAR(1000)
SET @sql = N'SELECT @RecordCount = COUNT(News_ID) FROM tb_News ' + @strWhere 
EXEC sp_executesql @sql,N'@RecordCount INT OUTPUT',@RecordCount OUTPUT 
SET @PageCount = CEILING(@RecordCount * 1.0 / @PageSize)
IF @PageIndex = 0 OR @PageCount <= 1
 SET @strSql =N'SELECT TOP ' + STR( @PageSize ) + @strColumn + @strFrom + @strWhere + @strOrder
ELSE IF @PageIndex = @PageCount - 1            
 SET @strSql =N'SELECT ' + @strColumn + ' FROM ( SELECT TOP '+ STR( @RecordCount - @PageSize * @PageIndex ) + @strColumn + @strFrom + @strWhere
       + @strOrderIn + @strOrderOut  
ELSE         
 SET @strSql =N'SELECT TOP ' + STR( @PageSize ) + @strColumn + ' FROM ( SELECT TOP '+ STR( @RecordCount - @PageSize * @PageIndex ) + @strColumn
             + @strFrom + @strWhere + @strOrderIn + @strOrderOut
EXEC (@strSql)  
RETURN
GO

本文出自 “幸福开心豆” 博客,请务必保留此出处http://51xingfu.blog.51cto.com/219185/40173





    文章评论
 
2007-08-29 21:29:47
DECLARE @strSql NVARCHAR(4000) --Sql语句      
DECLARE @strColumn NVARCHAR(1000) --要查询的列
DECLARE @strFrom NVARCHAR(100) --表
DECLARE @strOrder NVARCHAR(100) --第一页排序规则
DECLARE @strOrderIn NVARCHAR(100) --内层排序规则
DECLARE @strOrderOut NVARCHAR(100) --外层排序规则
DECLARE @strWhere NVARCHAR(1000) --查询条件
留下

 

发表评论

昵   称:
验证码:  点击图片可刷新验证码  博客过2级,无需填写验证码
内   容: