以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.com/bbs/index.asp)
--  专家坐堂  (http://foxtable.com/bbs/list.asp?boardid=2)
----  速度,速度!  (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=103603)

--  作者:czy66ds
--  发布时间:2017/7/12 15:40:00
--  速度,速度!
我在命令窗口执行如下代码,结果竟耗时41分钟!
数据库表中符合条件的有20104行(共30530行),这段代码有改进的余地吗?
数据库在阿里云,本地带宽足够用。

Dim st As Date = Date.Now
Dim r As Row
For Each r In Tables("杰西入库记录表").Rows
    If r("类型") = "调货" Or r("类型") = "配货" Then
        r("操作日期") = r("日期")
        r.Save
    End If
Next

Dim ddt As DataTable
Dim dr As DataRow
Dim cmd As new SQLCommand
cmd.C
cmd.CommandText = "select [_Identify],日期,类型,操作日期 fr om {乐町入库记录表} where 类型 in (\'调货\',\'配货\') "
ddt = cmd.ExecuteReader(True)
For Each dr In ddt.DataRows
    dr("操作日期") = dr("日期")
Next
ddt.Save
DataTables("杰西入库记录表").Load
MessageBox.Show("耗时: " & (Date.Now - st).TotalSeconds & "秒")

--  作者:cbt
--  发布时间:2017/7/12 15:56:00
--  
如果 直接 赋值 某列=某列 可以参考下面的代码,直接后台跟新,无须加载!
cmd.CommandText = " u p d a t e {乐町入库记录表} set 操作日期=日期 where 类型 in (\'调货\',\'配货\') "
[此贴子已经被作者于2017/7/12 15:57:28编辑过]

--  作者:czy66ds
--  发布时间:2017/7/12 16:12:00
--  
谢谢回复。
但是这样不行啊,执行结果是:所有满足条件的行其操作日期列都赋了同一个值。

--  作者:cbt
--  发布时间:2017/7/12 16:17:00
--  
 执行结果是:所有满足条件的行其 操作日期 列都赋了 同行   日期 这个值 !
怎么是同一个值呢?,应该是同行的值

--  作者:czy66ds
--  发布时间:2017/7/12 16:30:00
--  
我感觉UPDATE没有循环的概念,并不“取同行的日期值”,似乎只取第一个满足条件的日期值,并将此值赋给了所有行的操作日期列。
如果可以实现同行操作日期=同行日期,那可太好了。

--  作者:有点蓝
--  发布时间:2017/7/12 16:55:00
--  
4楼的说法没错,请测试过再说
--  作者:czy66ds
--  发布时间:2017/7/12 17:07:00
--  
我试过,不行呀。我再试试看。
要真的如此,可太好了。


--  作者:有点蓝
--  发布时间:2017/7/12 17:25:00
--  
怎么测试的?贴出具体代码
--  作者:czy66ds
--  发布时间:2017/7/12 17:35:00
--  
Dim cmd As new SQLCommand
cmd.ConnectionName = "jcc"
cmd.CommandText = "upd ate {乐町入库记录表} set 操作日期=日期 wh ere 类型 in (\'调货\',\'配货\') "
cmd.ExecuteNonQuery
--  作者:czy66ds
--  发布时间:2017/7/12 18:03:00
--  

结果

 


图片点击可在新窗口打开查看此主题相关图片如下:qq截图20170712174250.png
图片点击可在新窗口打开查看