本帖最后由 大叔 于 2019-12-15 22:32 编辑
我需要定时更新SQL数据 目前用使用下面的方式
For $i = 1 To 400 Step +1
$Conn.Execute("update host set ll='" & $a[$i]& "' where id='" & $i & "'")
Next
发现随机部分数据更新不成功。
通过调式 确认数据没问题
怀疑上面这部分不合理
想问问大老们 有没有办法
用一条$Conn.Execute("update host 一次更新这400条数据
使用下面办法 用分号隔开语句 发现故障依旧 怀疑 下面的一条命令应该还是三次查询 并没有改变执行效率!
$Conn.Execute("update host set ll='1' where id=''1" ;"update host set ll='2' where id=''2" ; "update host set ll='3' where id=''3" )
之后继续百度发现了另一种方式
$Conn.Execute("UPDATE host SET ll = CASE id "& _
"'"WHEN 1 THEN '" & $lldate[1] & _
"' WHEN 2 THEN '" & $lldate[2] & _
"' WHEN 3 THEN '" & $lldate[3] & _
"' END where id in (1,2,3)"
上面这种是真正的一次查询 更新多条
之后写了个for next 循环生成SQL语句
程序 报错 3.au3"(2,8047) : error: yacc stack overflow
疑似 单行字符过多。 之后拆分成每百条一组
400条分成四次$Conn.Execute("update
目前观察几个小时 随机丢数据的问题没有再次出现
原因猜测 $Conn.Execute是没有回显的
所以短时间往SQL SERVER 发送了大量的查询请求
至使部分查询工作没有正常进行
理论上 我用原来的方式 加个 SLEEP(300)就不会有随机查询失败的情况了
但是数据量较大的情况下 延时不好控制 1000条就300秒。五分钟过去了
因此还是单次查询更新多条数据 更适合 此贴完结!
|