免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2998 | 回复: 7
打印 上一主题 下一主题

请教dand0285 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2006-02-23 19:27 |只看该作者 |倒序浏览
aim表:
code 北京大学 清华大学 中国人民大学 北京邮电大学
0101
0102
0201
0202
0203
0204
0301
0302
0303
0304
0305

data表:
sname dcode num
北京大学 0101 5
北京大学 0102 2
北京大学 0201 3
北京大学 0301 4
清华大学 0101 5
清华大学 0201 6
清华大学 0301 8
中国人民大学 0202 7
中国人民大学 0302 7
中国人民大学 0305 9
北京邮电大学 0301 10
北京邮电大学 0302 12
北京邮电大学 0303 15


看上面的两个表,现在要把data表中的num的数值插入到aim表中。
如北京大学的0101对应的num值为5,则在aim表的“北京大学”这一字段下的0101单元格插入“5”;
清华大学的0101对应的num值为4,则在aim表的“清华大学”这一字段下的0101单元格里插入4。

在ACCESS中,我可以一个学校一个学校的做,现在如果我想一次把aim表中的所有学校都填完的话,可以用游标做吗?能做的话,该怎么做?小弟在此谢过:)

论坛徽章:
0
2 [报告]
发表于 2006-02-23 22:06 |只看该作者
请看你发的另一个问题,我帮你解决了.
http://www.itpub.net/492853,2.html

论坛徽章:
0
3 [报告]
发表于 2006-02-24 14:44 |只看该作者
自已实在是搞不定了,请各位高手帮小弟一把,不胜感激呀

论坛徽章:
0
4 [报告]
发表于 2006-02-24 14:51 |只看该作者
如果觉得上面那两个表看不大清楚的话,
请加83232062
我将数据库传过来.

论坛徽章:
0
5 [报告]
发表于 2006-02-24 17:47 |只看该作者

回答你的问题,看对不对

Create  proc Pdemo as

SET NOCOUNT ON
Declare @sname varchar(20),@dcode varchar(20), @sum_num int

DECLARE testcursor CURSOR FOR
select sname,dcode,sum(num) as sum_num
from data
group by sname,dcode

OPEN testcursor

FETCH NEXT FROM testcursor
Into @sname,@dcode,@sum_num

WHILE @@FETCH_STATUS = 0
BEGIN
   exec(\'update aim set \' + @sname + \'=\' + @sum_num + \' where code= \' + @dcode)
   FETCH NEXT FROM testcursor
   Into @sname,@dcode,@sum_num
END
CLOSE testcursor
DEALLOCATE testcursor

论坛徽章:
0
6 [报告]
发表于 2006-02-25 11:32 |只看该作者
这段代码不知道楼上调试过没有,
可能不能得出结果,
我在企业管理器中导入两个数据表,
再在查询分析器中把代码贴进去,
运行了之后,aim表应该就是被更新了的,,
但结果还是什么都没有.

论坛徽章:
0
7 [报告]
发表于 2006-02-26 16:26 |只看该作者
Create proc Pdemo7 as

SET NOCOUNT ON
Declare @sname varchar(20),@mcode varchar(20),@pnum int

DECLARE testcursor CURSOR FOR
select sname,mcode,pnum
from data

OPEN testcursor

FETCH NEXT FROM testcursor
Into @sname,@mcode,@pnum

WHILE @@FETCH_STATUS = 0
BEGIN
exec(\'update paim  set \' + @sname + \'=\'+@pnum+ \'where paim.code=\'+@mcode )
FETCH NEXT FROM testcursor
Into @sname,@mcode,@pnum
END
CLOSE testcursor
DEALLOCATE testcursor

上述代码运行时,可以正常运行,不过在执行存储过程的时候,老是提示\"where\"附近有错,
请高手指点迷津,谢谢!

论坛徽章:
0
8 [报告]
发表于 2006-02-28 17:43 |只看该作者

是不是这样的问题

exec(\'update paim set \' + @sname + \'=\'+@pnum+ \'where paim.code=\'+@mcode )
where 前面应该有一个空格,你把空格去掉了,改为如下:
exec(\'update paim set \' + @sname + \'=\'+@pnum+ \'  where paim.code=\'+@mcode )
----------------------------------------------------------------------------------------------------------
另:这个存储过程在我机器上试过了,一切正常,如还有问题请说明一下。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP