简单的存储过程分页,删除多条记录的存储过程,存储过程中调用存储过程

 

呵呵..又来写文章了,我们的经理飞飞同学说的,要经常写博客,把自己学到的东西都总结起来,便于以后查阅.

这不是.今天开发新闻系统的数据库,飞飞同学说对新闻的查询要用存储过程分页显示...可是....我不会吖````5555555555.木的办法...就请教了...然后就学习了下一个简单的存储过程分页.自我感觉基本的框架就是那样的,

可能用起来要灵活变通下,这个分页存储过程不是很通用的.废话不多说咯,把今天刚学的存储过程分页发上来大家分享下. 存储过程如下:

ALTER   PROCEDURE  dbo.PageList 
    
    
@index   int , -- 当前页号,从0开始编号,所以如果该参数是1的话代表的是第二页
     @pagesize   int , -- 每页数据条数
     @contation   nvarchar ( 1000 ) -- 判断条件,就是where后面的东东
    
AS
    
    
declare   @count   int   -- 符合查询结果的数据条数
     declare   @startID   varchar ( 20 -- 当前页中记录的开始ID,每张表都有自己的主键ID,每条记录都有自己唯一的ID
     declare   @rowcount   int   -- 下面会用到set rowcount @rowcount,就是取top @rowcount条记录
     declare   @maxpage   int   -- 总页数
     declare   @temp   nvarchar ( 2000 -- select语句字符串
     
    
SET  NOCOUNT  ON   
    
    
    
if ( LEN ( @contation ) > 0 -- 不输入查询条件则默认全部查询,如果输入了查询条件,则LEN(@contation)>0,然后在查询条件最开头加一个 and,即where 1=1 and (查询条件.....)
         set   @contation = '  and  ' + @contation  
    
-- select @count=count(*) from [dptInfo] where 1=1
    
    
select   @temp = ' select @count=count(*) from [dptInfo] where 1=1 ' + @contation
    
    
execute  sp_executesql  -- 执行查询
             @temp ,
            N
' @count int output ' ,
            
@count  output  -- 返回@count
    
    
set   @maxpage = ( @count + @pagesize - 1 ) / @pagesize   -- 计算总页数,这个是分页计算总页数的公式哦,这个算术表达式一定要这样写,否则maxpage的值可能会不符
    
    
if ( @index + 1 >= @maxpage -- 如果输入的当前页号加1大于或等于总页数
         set   @index = @maxpage - 1   -- 当前页号等于总页数减1,这个意思就是只要是大于总页数的页号,都显示最后一页的数据
    
    
if ( @index < 0 -- 当@count为0时,@maxpage会等于0,然后上面那个if语句会得出@index=-1,想一想,第-1页?!!!可能存在嘛?(%^&$$$%#$%^%)
         set   @index = 0   -- 于是当@index<0时,把@index设置为0
        
    
set   @rowcount = @index * @pagesize + 1
    
    
set   rowcount   @rowcount   -- 影响下面那条select语句,返回下面那条select语句的top @rowcount条记录
    
    
-- select @startID=id from [dptInfo] where 1=1 order by id desc
    
    
select   @temp = ' select @startID=id from [dptInfo] where 1=1 ' + @contation +   '  order by id desc '
    
    
execute  sp_executesql  -- 执行上面的select语句
             @temp ,
            N
' @startID varchar(20) output ' ,
            
@startID  output  -- 返回@startID的值,@startID的值是上面那条select语句最后一条满足的记录的ID
    
    
set   rowcount   @pagesize   -- 影响下面的那条select语句,返回top @pagesize条记录
     
    
-- select * from [dptInfo] where id<=@startID order by id desc
    
    
select   @temp = ' select * from [dptInfo] where id<= ' + @startID + @contation +   '  order by id desc '   -- 从@startID开始降序依次取@pagesize条记录
    
    
execute  sp_executesql  -- 执行上面的select语句
             @temp
    
    
set  nocount  off
    
    
RETURN   @maxpage   -- 返回总页数,可能会用到
删除多条记录的存储过程:
ALTER   PROCEDURE  dbo.PR_Article_DelList 
    
    
@ids   nvarchar ( 400 -- 一个ArticleID的集合
    
AS     
    
    
    
SET  NOCOUNT  ON   
    
    
-- 删除该ID集合中的所有记录
     exec  ( ' delete from [Article] where ArticleID in ( ' + @ids + ' ) ' )
  
    
    
SET  NOCOUNT  OFF
    
    
RETURN

例如:要删除1,2,3,4,5,6这6个ID的记录,则@ids='1,2,3,4,5,6'

存储过程中调用存储过程:

ALTER   PROCEDURE  dbo.PR_AddReply 
    
    
@titleID   int ,
    
@reUserID   int ,
    
@reContent   ntext
    
AS
    
declare   @s   nvarchar ( 4000 )
    
declare   @pro   nvarchar ( 100 )
    
set   @pro = ' PR_UpdateTitle '
    
declare   @isReply   bit
    
set   @isReply = 1
    
    
SET  NOCOUNT  ON   
    
    
    
insert   into   [ T_Reply ]   values ( @titleID , @reUserID , @reContent )
            
    
-- 调用另外一个存储过程:PR_UpdateTitle
     set     @s = @pro     + '     ''' + cast ( @titleID     as     varchar ) + ''' , ''' + cast ( @isReply     as     varchar ) + ''''
    
exec ( @s )   

    
    
SET  NOCOUNT  OFF
    
    
RETURN   @@identity
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值