简单的存储过程分页,删除多条记录的存储过程,存储过程中调用存储过程
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
这不是.今天开发新闻系统的数据库,飞飞同学说对新闻的查询要用存储过程分页显示...可是....我不会吖````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
相关文章推荐
- 养老院的出院的存储过程包括历史记录备份和原记录删除,并调用其他存储过程
- 一个简单的oracle分页存储过程的实现和调用
- 一个简单的oracle分页存储过程的实现和调用
- 一个简单的oracle分页存储过程的实现和调用
- sql 存储过程 几个 简单例子,及在asp.net(C#)中调用存储过程的代码
- 一个简单的oracle分页存储过程的实现和调用
- oracle实现存储过程的分页并用java代码调用存储过程
- 一个简单的oracle分页存储过程的实现和调用
- 编写存储过程,并且使用java代码调用存储过程的简单例子
- 最简单的SQL存储过程调用(不会存储过程的人非常值得看,很有实际意义)
- 数据库技术_Orcale技术(0002)_5分钟会用存储过程_存储过程简单实例(包含循环、条件、增改查、参数传入、变量赋值、java调用等)
- 一个简单的ASP调用存储过程分页
- 一个简单的oracle分页存储过程的实现和调用
- 通过存储过程进行字符串分拆,在同时删除多条记录的时候有用。
- 一个简单的oracle分页存储过程的实现和调用
- 一个简单的oracle分页存储过程的实现和调用
- 简单sqlserver 分页存储过程创建 及调用
- :[百万级]通用存储过程.分页存储过程..返回指定返回条数、指定页数的记录
- [Database]创建存储过程并在ASP.NET中的调用带参数的存储过程与及调用带参数的SQL语句对比
- LINQ(LINQ to SQL)之调用存储过程的添加、查询、更新和删除