当前位置: 代码迷 >> SQL >> sql server 存储过程示范
  详细解决方案

sql server 存储过程示范

热度:56   发布时间:2016-05-05 13:56:49.0
sql server 存储过程示例

如下:

	if object_id('index_proc') is not null		drop proc index_proc	go	create procedure index_proc	@postAmount int output,	@replyAmount int output,	@todayAmount int output,	@userAmount int output,	@newUser varchar(20) output	as	begin	declare @todayPost int;	declare @todayReply int;		---新建一个临时表,通过下面的游标循环把数据插入到此临时表中	if exists( select * from tempdb..sysobjects where id=OBJECT_ID('tempdb..#new_post') )	drop table #new_post;	create table #new_post(	  mid int ,	  pid int ,	  theme varchar(100),	  username varchar(30),	  pdatetime smalldatetime,	  today_post int,	  postAmount int,	  replyAmount int,	  mname varchar(20)		)	----游标	declare cur cursor  for select mid from module;	declare @mid int;	open cur;	fetch next from cur into @mid;	while @@fetch_status=0	begin		insert into #new_post(mod.mid,p.pid,theme,username,pdatetime,today_post,postAmount,replyAmount,mname) select top 1 mod.mid,pid,theme,username,pdatetime,	(select count(p1.pid) from post as p1 where convert(char(10),p1.pdatetime,126)=convert(char(10),getdate(),126) and p1.mid = @mid) as today_post, 	(select count(p2.pid) from post as p2 where p2.mid = @mid) as postAmount, 	(select count(r1.rid) from reply as r1 where r1.pid in(select p3.pid from post as p3 where p3.mid [email protected])) as replyAmount,	mod.mname	from module as mod  left join post as p on mod.mid = p.mid   where mod.mid = @mid order by p.pdatetime desc;	fetch next from cur into @mid;	end	close cur	deallocate cur   		select * from  #new_post;	select @postAmount = count(1) from post;	select @replyAmount = count(1) from reply;	select @todayPost = count(1) from post where convert(char(10),pdatetime,126)=convert(char(10),getdate(),126);	select @todayReply = count(1) from reply  where convert(char(10),rdatetime,126)=convert(char(10),getdate(),126);	set @todayAmount  = @[email protected];	select @userAmount = count(1) from bbs_user;	select top 1 @newUser =  username from bbs_user order by registerTime desc	end		---游标调用	go	declare @postAmount int;	declare	@replyAmount int;	declare	@todayAmount int;	declare	@userAmount int;	declare	@newUser varchar(20);		execute   index_proc @postAmount output,@replyAmount output,@todayAmount output,@userAmount output,@newUser output;	print @postAmount	print @todayAmount

??

jdcb调用存储过程代码:

	public  BbsIndex callIndexProc(){		Connection conn = getConnection();		try {			CallableStatement cs = conn.prepareCall("{call dbo.index_proc(?,?,?,?,?)}");			cs.registerOutParameter(1,Types.INTEGER);			cs.registerOutParameter(2,Types.INTEGER);			cs.registerOutParameter(3,Types.INTEGER);			cs.registerOutParameter(4,Types.INTEGER);			cs.registerOutParameter(5,Types.VARCHAR);			 ResultSet rs = cs.executeQuery();			 BbsIndex bbs = new BbsIndex();			 while(rs.next()){				  //ModuleEntity me = new ModuleEntity();				  IndexTempEntity ite = new IndexTempEntity();				  ite.setMid(rs.getInt(1));				  ite.setPid(rs.getInt(2));				  ite.setTheme(rs.getString(3));				  ite.setUsername(rs.getString(4));				  ite.setPdatetime(rs.getDate(5));				  ite.setToday_post(rs.getInt(6));				  ite.setPostAmount(rs.getInt(7));				  ite.setReplyAmount(rs.getInt(8));				  ite.setMname(rs.getString(9));				  bbs.getIndexTempList().add(ite);			 }			 bbs.setPostAmount(cs.getInt(1));			 bbs.setReplyAmount(cs.getInt(2));			 bbs.setTodayAmount(cs.getInt(3));			 bbs.setUserAmount(cs.getInt(4));			 bbs.setNewUser(cs.getString(5));			 return bbs;		} catch (SQLException e) {			e.printStackTrace();		}finally{			DbUtils.closeQuietly(conn);		}		return null;	}

?

  相关解决方案