有一个表为A
里面有I_ID,UpdateTime,I_Valid
I_Valid为到期时间
到期时间为30天,更新后UpdateTime为now()
I_Valid为原来到期时间比如为30天以NOW()基础上再次30天
图1
I_ID I_Valid UpdateTime
1 2009-11-21 0:00:00 2009-10-21 00:00:00
2 2009-10-28 0:00:00 2009-10-21 00:00:00
3 2009-11-26 0:00:00 2009-10-21 00:00:00
4 2009-11-21 0:00:00 2009-10-21 00:00:00
图上ID1有效期为31天
id2有效期为7天
ID3有效期为5天
ID4有效其为31天
现在要更新后为图下
图1
I_ID I_Valid UpdateTime
1 2009-11-26 0:00:00 2009-10-26 00:00:00
2 2009-11-02 0:00:00 2009-10-26 00:00:00
3 2009-10-31 0:00:00 2009-10-26 00:00:00
4 2009-11-06 0:00:00 2009-10-26 00:00:00
现在要如何更新时也对应更新I_valid的有效天数。
我写的是这样子的
Sqlt = "Select * from HouseInfo where I_ID In ("&I_ID&")"
Set LTObjrs = UseDB.EditDB(Sqlt)
Do while not LTObjrs.eof
i_valid=ltobjrs("i_valid")
updatetime=ltobjrs("updatetime")
sumDay = DateDiff("d",updatetime,i_valid)
iDateDiff = Cint(sumDay) 取得有效天数
I_Valid = DateAdd("d",iDateDiff,now()) 重新计算新的有效天数
LTObjrs.movenext
loop
Sql = "Update HouseInfo Set UpdateTime = '"&Now()&"',I_Valid='"&I_Valid&"' Where I_ID In ("&I_ID&")"
UseDB.EditDB(Sql)
UseDB.CloseDB()
这样子I_valid有效天数只取到ID1的天数更新时下面的都是同样的天数了,所以不行。谁知道帮忙解决一下。如何写。
只能取到ID1的有效天数
下面的就对不上有效天数了。
sql 批量update in
答案:3 悬赏:0 手机版
解决时间 2021-04-05 17:30
- 提问者网友:那叫心脏的地方装的都是你
- 2021-04-05 00:33
最佳答案
- 五星知识达人网友:往事埋风中
- 2021-04-05 02:07
--sqlserver
update a set a.mapping_id=b.id from a,b where a.order_id = b.order_id;
--mysql
update a,b set a.mapping_id=b.id from a,b where a.order_id = b.order_id;
--oracle
update a set a.mapping_id=(select b.id from b where a.order_id = b.order_id) where exists (select 1 from b where a.order_id = b.order_id);
update a set a.mapping_id=b.id from a,b where a.order_id = b.order_id;
--mysql
update a,b set a.mapping_id=b.id from a,b where a.order_id = b.order_id;
--oracle
update a set a.mapping_id=(select b.id from b where a.order_id = b.order_id) where exists (select 1 from b where a.order_id = b.order_id);
全部回答
- 1楼网友:低音帝王
- 2021-04-05 03:05
Sql = "Update HouseInfo Set I_Valid=convert(varchar(10),dateadd(dd,datediff(dd,UpdateTime,getdate()),I_Valid),120),
UpdateTime=convert(varchar(10),getdate(),120) "
UseDB.EditDB(Sql)
UseDB.CloseDB()
- 2楼网友:时间的尘埃
- 2021-04-05 02:42
这个建议你去用数据库触发器做,不用在程序里面写sql语句,直接在数据库哪里做就行了
CREATE TRIGGER [触发器名]
ON [A]
FOR INSERT
AS
UPDATe a SET I_Valid = (SELECT DATEADD(day, 30, UpdateTime ) FROM inserted) WHERe I_ID = (SELECt tel FROM inserted)
CREATE TRIGGER [触发器名]
ON [A]
FOR UPDATe
AS
UPDATE a SET I_Valid = (SELECT DATEADD(day, 30, UpdateTime ) FROM DELETeD)WHERe I_ID = (SELECT tel FROM DELETED)
还有什么不懂qq 175904944
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯