教程学院
图像设计 多媒体类 机械制图 办公软件 操作系统 系统编程 网站编程 网页制作 数据库类 网络路由 网络工程 网络安全 考试认证
firefox火狐浏览器下载
酷网学院
CAD
AutoCad Cam350 ProEngineer GCcam MATLAB Unigraphics SolidWorks CAXA Solid3000 Cimatron EdgeCAM
系统
安全 防火墙 病毒 WinXP Win2003 Vista
数据库
编程
网络
精彩图库
  当前位置: 库库中文网 · 数据库类教程 · MSSQL教程 · MsSql综合技巧

修改数据效率疑难

学院最新推荐文章
教程推荐
『修改数据效率疑难』如果文章有大量图片,显示会较慢,请等待图片下载完成
 
点击数: 更新时间:2008-9-28 
本人菜鸟,自己不会来问
数据表:
--------------------------
日期,上期余额,现金1,现金2,本期余额  --:上期余额为该条数据上面的本期余额,该表按日期大小排序
-----------------------------
例如:
1)2008-9-25 00:00:00 ,0,12,12,24
2)2008-9-25 00:00:01 ,24,3,2,29
3)2008-9-25 00:01:00,29,4,-2,31
4)2008-9-25 01:00:00 ,31,2,2,35
5).....这里想这样排序可能有N <500000条
-------------------------------
但是这是用户将中间的记录修改了
例如:将2)修改为:
2)2008-9-25 00:00:01 ,24,4,2,30
后面页要依次类推的进行修改,为:
3)2008-9-25 00:01:00,30,4,-2,32
4)2008-9-25 01:00:00 ,32,2,2,36
............这是可能修改到完
我用游标,这样可能修改很多次?就很慢?大家能不能给个好的方法?使这样快点
谢谢大家回复!!!!!!!!!!!!!!!!!!!!!!!!

这个问题第1个回答:
俺也很菜 帮顶
这个问题第2个回答:
SQL code



update tb set 本期余额=本期余额+1,现金1=现金1+1

where 日期>所修改紀錄的日期




这个问题第3个回答:


--先更改本条,
update tb set 现金1=现金1+1 where id=2
--更改以后
update b set 上期余额=上期余额+1 from tb a,tb b
where a.id=2 and b.日期,>a.日期
这个问题第4个回答:
SQL code

create table tb (日期 datetime,上期余额 int,现金1 int,现金2 int,本期余额 int)

insert into tb values('2008-9-25 00:00:00' ,0,12,12,24) 

insert into tb values('2008-9-25 00:00:01' ,24,3,2,29 )

insert into tb values('2008-9-25 00:01:00' ,29,4,-2,31) 

insert into tb values('2008-9-25 01:00:00' ,31,2,2,35) 

go

--原始数据

select * from tb

/*



日期                                                     上期余额        现金1         现金2         本期余额        

------------------------------------------------------ ----------- ----------- ----------- ----------- 

2008-09-25 00:00:00.000                                0           12          12          24

2008-09-25 00:00:01.000                                24          3           2           29

2008-09-25 00:01:00.000                                29          4           -2          31

2008-09-25 01:00:00.000                                31          2           2           35



(所影响的行数为 4 行)

*/





--例如:将2)修改为: 2)2008-9-25 00:00:01 ,24,4,2,30 

update tb set 现金1 = 4 where 日期 = '2008-9-25 00:00:01'



select 日期  ,

       上期余额 =

                isnull((select sum(现金1) from tb where 日期 < t.日期),0) + 

                isnull((select sum(现金2) from tb where 日期 < t.日期),0) ,

       现金1 ,

       现金2 ,

       本期余额 = 

                isnull((select sum(现金1) from tb where 日期 <= t.日期),0) + 

                isnull((select sum(现金2) from tb where 日期 <= t.日期),0)

from tb t

/*

日期                                                     上期余额        现金1         现金2         本期余额        

------------------------------------------------------ ----------- ----------- ----------- ----------- 

2008-09-25 00:00:00.000                                0           12          12          24

2008-09-25 00:00:01.000                                24          4           2           30

2008-09-25 00:01:00.000                                30          4           -2          32

2008-09-25 01:00:00.000                                32          2           2           36



(所影响的行数为 4 行)

*/



drop table tb


这个问题第5个回答:
谢谢上面的回答!!看来自己要努力学习!!十分感谢!!!还有没好的!!!
这个问题第6个回答:
@dawgui 想你那样update怎么做??本人实在太菜,我打算用将select修改成update不行
这个问题第7个回答:
SQL code

update tb set

       上期余额 =

                isnull((select sum(现金1) from tb where 日期 < t.日期),0) + 

                isnull((select sum(现金2) from tb where 日期 < t.日期),0) ,

       本期余额 = 

                isnull((select sum(现金1) from tb where 日期 <= t.日期),0) + 

                isnull((select sum(现金2) from tb where 日期 <= t.日期),0)

from tb t


这个问题第8个回答:
引用 6 楼 shizhusz110 的回复:
@dawgui 想你那样update怎么做??本人实在太菜,我打算用将select修改成update不行

SQL code

create table tb (日期 datetime,上期余额 int,现金1 int,现金2 int,本期余额 int)

insert into tb values('2008-9-25 00:00:00' ,0,12,12,24) 

insert into tb values('2008-9-25 00:00:01' ,24,3,2,29 )

insert into tb values('2008-9-25 00:01:00' ,29,4,-2,31) 

insert into tb values('2008-9-25 01:00:00' ,31,2,2,35) 

go

--原始数据

select * from tb

/*



日期                                                     上期余额        现金1         现金2         本期余额        

------------------------------------------------------ ----------- ----------- ----------- ----------- 

2008-09-25 00:00:00.000                                0           12          12          24

2008-09-25 00:00:01.000                                24          3           2           29

2008-09-25 00:01:00.000                                29          4           -2          31

2008-09-25 01:00:00.000                                31          2           2           35



(所影响的行数为 4 行)

*/





--例如:将2)修改为: 2)2008-9-25 00:00:01 ,24,4,2,30 

update tb set 现金1 = 4 where 日期 = '2008-9-25 00:00:01'



--修改其他数据

update tb

   set 上期余额 =

                isnull((select sum(现金1) from tb where 日期 < t.日期),0) + 

                isnull((select sum(现金2) from tb where 日期 < t.日期),0) ,

       本期余额 = 

                isnull((select sum(现金1) f

[1] [2] 下一页  

作者:shizhusz… 来源:C.S.D.N
】【关闭窗口
·上页:
·下页:
相关文章
     数据库类教程 - MsSql综合技巧
普通教程【脑袋快想爆炸了- -!】 怎么样
普通教程关于级联删除地疑难,新手提问,
普通教程怎么样动态控制列数?
普通教程数据库恢复 MS2000
普通教程当数据库中varchar字段值为null
普通教程create function 怎么才无法要返
普通教程各位帮我看看是啥疑难啊, SQL运
普通教程SQL server 2005 安装疑难 SP2更
普通教程sql update
普通教程update触发器地疑难
普通教程字符串地查询疑难
普通教程安全性--登陆--想建一个用户tes
精彩图片汇集
advertisement
关于站点 - 广告服务 - 联系我们 - 版权隐私 - 免责声明 - 合作伙伴 - 程序支持 - 网站地图 - 返回顶部
网站文本地图
版权所有:库库中文 2005-2007 欢迎各种媒体转载我们的原创作品[转载请注明出处]
copyright © 2005-2008 www.QQGB.com online services. all rights reserved. 蜀ICP备05015578
Template designed by Virus. Optimized for 1024x768 to Firefox,Opera and MS-IE6. Site powered by EQL.
红盾
热爱电脑,热爱生活
拥有电脑,拥有生命
让我们享受拥有电脑的时光