怎么做个存储过程做循环更新?

zhengjialon 2009-06-10 10:54:22
如有下表:
ID Size startSize
1 60 0
2 80 60
3 100 80
4 140 100

把ID=3的Size改成10,则自动更新下表:
ID Size startSize
1 60 10
2 80 60
3 10 0
4 140 80
简单的说就是把表按SIZE升序排, 把startSize更新成为从0开始的前一条记录的SIZE(第一条记录因为没有前一条记录则设为0)
...全文
138 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhengjialon 2009-06-10
  • 打赏
  • 举报
回复
谢谢playwarcraft,刚才经你一提醒一查原来是用触发器做好了,以前做到一半了现在又开始从头做,以为没有做。。。
olddown 2009-06-10
  • 打赏
  • 举报
回复

create table #t(ID int,Size int,startSize int)
insert into #t (ID ,Size ,startSize )
select * from 表 order by Size
update #t
set @i=isnull(Size-@Size,0),
startSize=@i,
@Size=Size

select * from #t


playwarcraft 2009-06-10
  • 打赏
  • 举报
回复
测试数据手误,不过好像不影响结果
playwarcraft 2009-06-10
  • 打赏
  • 举报
回复
这个问题可能需要用触发器来实现比较好。。。
如果更新是一条一条的话。。。


Create table T (ID int,[size] int,startsize int)
insert into T
select 1,60,0
union all select 2,80,60
union all select 3,100,80
union all select 4,140,80
GO

Create trigger tri_t
on T
after update
as
BEGIN
IF update([size])
begin
Update T
set startsize = isnull((select max([Size]) from T as A
where A.[Size]<T.[Size]
),0)
end
END

Go
select * from T
/*
ID size startsize
----------- ----------- -----------
1 60 0
2 80 60
3 100 80
4 140 80
*/
Update T set Size=10 where ID=3

select * from T
/*
ID size startsize
----------- ----------- -----------
1 60 10
2 80 60
3 10 0
4 140 80
*/
drop table T

27,580

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 应用实例
社区管理员
  • 应用实例社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧