如下:
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 =@mid)) 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 = @todayPost+@todayReply;
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;
}
分享到:
相关推荐
后期对于投票结果需要进行一些权重的计算,过程比较复杂,便想到把计算过程放在SQL Server端,使用存储过程实现。但是,在调用存储过程的过程中却遇到了问题,一直无法返回记录集。最后发现问题出现在记录集的...
以下是针对"SQLSERVER存储过程例子"的详细解释。 1. **存储过程的概念**: 存储过程是一组为了完成特定功能的SQL语句,这些语句被组合在一起并保存在数据库中,用户可以通过调用存储过程的名字来执行这些语句。...
**创建存储过程示例**: ```sql CREATE PROCEDURE dbo.CallWebService @Url NVARCHAR(500), @MethodName NVARCHAR(100) AS BEGIN EXEC sp_OACreate 'WebServiceExample', @object_id OUTPUT EXEC sp_OAMethod @...
本篇将详细介绍如何在SQL Server存储过程中使用事务。 首先,事务有四个基本特性,即ACID(原子性、一致性、隔离性和持久性): 1. 原子性(Atomicity):事务中的所有操作要么全部完成,要么全部不完成,不会留下...
- 创建一个SQL Server存储过程,调用.NET方法。 在示例中,"SQL项目调用Webservice示例"可能包含了一个完整的.NET存储过程示例,用于演示如何构建和调用Web Service。可能的结构包括: - 存储过程源代码,展示...
### 执行SQL Server 存储过程并返回DataSet 在软件开发过程中,经常需要与数据库进行交互,其中一种常见的场景就是通过调用存储过程来获取数据并处理这些数据。本篇文章将详细探讨如何在C#中执行SQL Server的存储...
### SQL Server 存储过程 With Encryption 加密的解密方法 #### 背景与目的 在SQL Server中,为了保护存储过程中的敏感代码或逻辑,可以使用`WITH ENCRYPTION`选项对存储过程进行加密处理。这可以有效防止未经授权...
本文将深入解析SQL Server存储过程的创建、参数传递、事务管理、条件判断以及游标使用的语法细节。 #### 创建存储过程 存储过程的基本语法如下: ```sql CREATE PROCEDURE 存储过程名称 @参数1 数据类型, @参数...
至于"SQLServer2000存储过程与XML编程第2版code"这个文件,它可能包含了一些针对SQL Server 2000的存储过程示例代码和XML相关的实践。XML在SQL Server中用于数据交换和存储,学习如何在存储过程中使用XML数据类型和...
下面将详细解析标题“sql server 2008 存储过程示例带游标”所涉及的知识点,包括存储过程的创建、游标的使用以及SQL Server 2008中的特性。 ### 存储过程 存储过程是预编译的SQL语句集合,存储在数据库服务器上,...
在SQL Server 2008中,存储过程和触发器是数据库管理中不可或缺的重要组成部分,它们为数据库系统提供了更高级别的功能和控制。本篇将深入解析这两个概念及其在实际应用中的具体用法。 首先,存储过程是预编译的SQL...
在Java编程环境中,如Eclipse 3.3,与数据库进行交互是常见的需求,而调用SQL Server存储过程是其中一种高效的操作方式。存储过程是预编译的SQL语句集合,可以封装复杂的业务逻辑,提高性能并降低网络流量。本篇文章...
本文将详细介绍SQL Server存储过程中推荐使用的命名标准,并通过具体示例加以说明。 ### SQL Server存储过程命名标准概述 #### 前缀规则 存储过程的名称应以`sp_`为前缀,这是SQL Server系统内部所采用的标准前缀...
【C#创建SQL Server存储过程】在SQL Server 2005中,开发人员不再局限于使用T-SQL来创建存储过程、函数和触发器。得益于SQL Server 2005对.NET Common Language Runtime (CLR)的支持,我们可以使用C#、VB.NET等.NET...
在SQL Server中,存储过程是预编译的SQL语句集合,它们封装了特定的数据库操作,提高了代码的重用性和执行效率。当涉及到处理多个值时,我们常常会遇到如何将这些值作为参数传递给存储过程的问题。本文将探讨在SQL ...
### SQL存储过程发送HTTP请求知识点解析 ...综上所述,通过SQL Server存储过程发送HTTP请求是一项实用的技术,能够在数据库层面上实现与外部系统的有效集成。然而,在实际应用时还需要考虑到安全性、性能等方面的问题。
在SQL Server数据库开发中,存储过程是至关重要的一个部分,它是一种预编译的SQL语句集合,可以被多次调用,以提高数据库操作的效率和安全性。本教程旨在深入探讨存储过程在SQL Server中的应用,帮助开发者更好地...
在JavaServer Pages (JSP) 中调用SQL Server存储过程是一项常见的任务,特别是在构建Web应用程序时需要执行复杂的数据库操作。存储过程是预先编译的SQL语句集合,可以在数据库服务器上执行,提供性能优化和代码复用...
在探讨SQL Server存储过程的相关知识点之前,首先需要明确存储过程的定义。存储过程是一组为了完成特定功能的SQL语句集合,它可以接受输入参数并可返回输出参数,还可以包含逻辑控制流程,比如条件判断、循环、分支...