永发信息网

sql 批量update in

答案:3  悬赏:0  手机版
解决时间 2021-04-05 17:30
  • 提问者网友:那叫心脏的地方装的都是你
  • 2021-04-05 00:33
有一个表为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的有效天数
下面的就对不上有效天数了。
最佳答案
  • 五星知识达人网友:往事埋风中
  • 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);
全部回答
  • 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
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯