SQL存储过程更新数据
发布网友
发布时间:2022-04-10 17:33
我来回答
共6个回答
懂视网
时间:2022-04-10 21:54
过程如下:
思路:使用字段匹配和修改字段即可解决问题,用时3分钟左右吧,在表已经建好的基础上。
旧数据:
将新数据插入已经建好的表中,如下:
使用SQLCel的字段匹配:
这样去匹配,能达到目的,状态被更新了结果如下图:
注:但是!!!!!!!!!如果像下面这样去匹配,会出现一个错误
或者这样匹配
------------------------
总结:目的基本是达到了,但是出现那个错误的原因我搞不懂
SQLCel匹配原数据信息,更新原数据所有信息并插入新数据的过程
标签:alt 如何 思路 sql nbsp code 状态 数据库 .com
热心网友
时间:2022-04-10 19:02
表HC_RKDMX的相关字段
YJSL OrderNO RKSL
先按OrderNO降序,得到
OrderNO RKSL YJSL
---4------5---NULL
---3------2---NULL
---2------4---NULL
---1------6---NULL
然后set @SL = 11
set YJSL =@SL -RKSL,减完为止
得到
OrderNO RKSL YJSL
---4------5----6
---3------2----4
---2------4----0
---1------6---NULL
再把最后减到为0的数变为11-(YJSL1+YJSL2)=1?
然后把剩下的不够减的NULL变0?
而且还要把得到的YJSL更新到原来的ROWID列上?得到一个6 4 1 0的列按物理地址插入?就是说倒序插入?
OrderNO RKSL YJSL
---4------5----0
---3------2----1
---2------4----4
---1------6----6
如果set @SL = 13的话
OrderNO RKSL YJSL
---4------5----8
---3------2----6
---2------4----2
---1------6---(-4) 这里(-4)变为13-(5+2+4)=2?
如果@SL不刚好的排序后的全N个RKSL的和的话怎么处理,负数和剩余的NULL全部为0?
看不懂。。是不是你算错了
应该是由@SL减去表里的RKSL等于YJSL(安OrderNO一次序小到大的顺序的计算,直到计算完为止)
OrderNO RKSL YJSL
---1------6----5
---2------4----1
---3------2----(-1)
---4------5---NULL
不知道是不是你算错了~想来想去不知道你怎么得到YJSL 6 4 1 0的唯一的可能是先降序 11-5=6 -2=4 -4=0那是6 4 0 NULL啊
囧。、。。自己本来还以为降序的
后面想来想去晕了~
其实存储过程的话很好写的,但是没弄清楚你要得到什么,怎么得到
热心网友
时间:2022-04-10 20:20
如果记录顺序和你的OrderNO一样的话,这样写
declare @temp numeric(12,2),@sl numeric(12,2)
set @sl=11
update HC_RKDMX set @temp=case when @sl+isnull(YJSL,0)>RKSL then RKSL else @sl+isnull(YJSL,0) end,@sl=case when @sl+isnull(YJSL,0)>RKSL then @sl-RKSL+isnull(YJSL,0) else 0 end,YJSL=@temp
如果不一样则要select into order by OrderNo到一个#temp,再在#temp表执行上面语句,最后再关联OrderNo更新回来
热心网友
时间:2022-04-10 21:55
存储过程:
Create procere update_data
@tablename varchar(50), --要更新的表名
@field1 varchar(50), --减数
@field2 varchar(50) --要更新的字段
AS
BEGIN
EXEC('update '+ @tablename +' set '+ @field2 +' = 11 -' + @field1 )
END
GO
调用时:EXEC update_data 'HC_RKDMX','RKSL','YJSL'
热心网友
时间:2022-04-10 23:46
哎..看不懂哟
热心网友
时间:2022-04-11 01:54
update HC_RKDMX
set YJSL= @SL - RKSL