用游标进行的简单数据统计更新
来源:互联网 发布:c语言模块化 编辑:程序博客网 时间:2024/04/29 12:06
下面是在设计系统时需要解决的一个问题:
有两个表:
用户表:
用户ID 用户名 发表日志数
1 A 2
2 B 10
文章表:
文章ID 发表者 ……
1 A
2 A
3 A
4 B
我需要先从文章表里读出每个用户的发表数,然后更新用户表里的“发表日志数”当然,可以通过在用户发表文章时,就更新该用户的发表日志数,这也不会影响什么系统性能的。不过我还是采用SQL语句(过程)来实现,而且是后台管理员单独操作、且不需要经常性的操作,所以对前台程序的运行几乎没任何影响,当然在一开始我也想采用临时表的方法来更新统计的,但后来想想, 如果通过临时表来处理,假如数据量非常大的时候怎么办?会不会出现问题……经朋友们的建议,使用下游标,着实方便,把前台要处理的,放到后台数据层做……实现方式
declare my_cursor cursor scroll dynamic /*后面跳到第一行 需要定义scroll dynamic*/
for
SELECT mem_Name,mem_PostLogs,mem_PostComms FROM blog_Member
open my_cursor
declare @name nvarchar(24)
declare @PostLog int
declare @PostComm int
fetch next from my_cursor into @name,@PostLog,@PostComm
while(@@fetch_status=0)
begin
fetch next from my_cursor into @name,@PostLog,@PostComm
update blog_Member set mem_PostLogs=(SELECT COUNT(log_ID) FROM blog_Content WHERE
log_Author=@name) WHERE mem_Name=@name
update blog_Member set mem_PostComms=(SELECT COUNT(comm_ID) FROM blog_Comment
WHERE comm_Author=@name) WHERE mem_Name=@name
end
fetch first from my_cursor into @name,@PostLog,@PostComm
update blog_Member set mem_PostLogs=(SELECT COUNT(log_ID) FROM blog_Content WHERE
log_Author=@name) WHERE mem_Name=@name
update blog_Member set mem_PostComms=(SELECT COUNT(comm_ID) FROM blog_Comment WHERE
comm_Author=@name) WHERE mem_Name=@name
close my_cursor
deallocate my_cursor
=========================================下面是CSDN的朋友们提供的解决方法
用表变量或者临时表都可以
declare @temp table(name varchar(50),count int);
insert into @temp select name,count(ID) from tableB group by name;
得到临时表里面有文章数
下面可以用游标来更新TableA的内容
declare @count int
declare @name varchar(50)
declare cursor_a cursor
for select name, count from @temp
open cursor_a
fech next from cursor_a into @name,@count
while @@FETCH_STATUS=0
begin
update TableA set count = @count where name=@name
fech next from cursor_a into @name,@count
end
close cursor_a
deallocate cursor_a
======================================第三种非常简单的方法======
update blog_Member set mem_PostLogs=(select count(log_ID) from blog_Content where log_Author=blog_Member.mem_Name)
update blog_Member set mem_PostComms=(select count(comm_ID) from blog_Comment where comm_Author=blog_Member.mem_Name)
====================================================================
users表有字段 id int identity, username varcahr(10), articleCount int
articles表有字段 id int identity, username varcahr(10)
那么可以这样处理:
declare @userName varchar(10), @articleCount int
DECLARE user_Cursor CURSOR FOR
SELECT a.username, a.articleCount FROM (select username, count(id) as articleCount from articles group by username) a
OPEN user_Cursor
FETCH NEXT FROM user_Cursor INTo @username, @articleCount
WHILE @@FETCH_STATUS = 0
BEGIN
if exists(select 1 from users where username=@username)
begin
update users set articleCount=@articleCount whereusername=@username
end
else
begin
insert into users(username, articleCount ) values(@username, @articleCount)
end
FETCH NEXT FROM user_Cursor INTo @username, @articleCount
END
CLOSE user_Cursor
DEALLOCATE user_Cursor
select * from users
- 用游标进行的简单数据统计更新
- 利用游标进行简单的数据先进先出操作
- Sql Server 中利用游标对table 的数据进行分组统计式输出…
- SQL 游标的使用(更新数据)
- oracle游标的更新与删除数据
- 使用游标更新统计信息
- 用游标更新的问题
- 游标更新数据
- 游标更新数据
- 游标加锁更新数据
- 利用游标循环进行更新插入的SQL事务语句
- 利用游标循环进行更新插入的SQL事务语句
- 游标操作,使用游标,更新数据
- Oracle 参数 游标[游标更新删除数据]
- Oracle 参数 游标[游标更新删除数据]
- 用unix命令进行简单的统计(Top N)
- 用python对文本格式的数据进行统计处理
- 也许有用的SQL:对单表数据进行count统计生成简单的交叉表
- 返回字符串的函数设计——几种方法
- 2006-05-16 (6) proxy
- 《多任务下的数据结构与算法》一书的目录
- 网络总是迟到吗(把msn空间变成移动空间)
- 《多任务下的数据结构与算法》主要新特色及新内容介绍
- 用游标进行的简单数据统计更新
- IIS上开WAP站点的设置
- 一个中国黑客致中国黑客和红客的公开信
- 成功突破DRM10
- 最近在学习VC++!
- 写点自己对Web2.0及以后web发展方向的看法
- Code the Tree
- 垃圾《Essential C++》
- sendmessage 发送消息