您的位置:首页 > 其它

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

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

这不是.今天开发新闻系统的数据库,飞飞同学说对新闻的查询要用存储过程分页显示...可是....我不会吖````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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐