Foxtable(狐表)用户栏目专家坐堂 → [求助]SQL语句效率改进


  共有3021人关注过本帖树形打印复制链接

主题:[求助]SQL语句效率改进

帅哥哟,离线,有人找我吗?
huaziqiao1976
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:幼狐 帖子:137 积分:1175 威望:0 精华:0 注册:2020/9/28 9:41:00
[求助]SQL语句效率改进  发帖心情 Post By:2023/8/23 13:29:00 [只看该作者]

用SQL语句做数据更新,二三千行数据要近1分钟,效率不高,请求修改

Dim cmd As New SQLCommand
cmd.C
Dim dt As DataTable
Dim Cols1() As String = {"f_zh","f_ye"}
Dim Cols2() As String = {"f_zh","f_ye"}
cmd.CommandText = "S*ELECT * From {表A} where f_zh In (S*elect f_zh FROM {表B})"
dt = cmd.ExecuteReader(True)
For Each dr1 As DataRow In dt.DataRows
    For Each dr As DataRow In DataTables("表B").DataRows
        If dr("f_zh") = dr1("f_zh") Then 
            For i As Integer = 0 To Cols1.Length -1
                dr("f_ye") = dr1("f_ye")         
            Next
Next

 回到顶部
帅哥,在线噢!
有点蓝
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:110764 积分:563752 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2023/8/23 13:41:00 [只看该作者]

这代码想做什么?

 回到顶部
帅哥哟,离线,有人找我吗?
huaziqiao1976
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:幼狐 帖子:137 积分:1175 威望:0 精华:0 注册:2020/9/28 9:41:00
  发帖心情 Post By:2023/8/23 13:48:00 [只看该作者]

在表A找到和表B账号(f_zh)相同的余额(f_ye)更新到表B
[此贴子已经被作者于2023/8/23 13:53:04编辑过]

 回到顶部
帅哥,在线噢!
有点蓝
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:110764 积分:563752 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2023/8/23 13:54:00 [只看该作者]

代码有2个遍历是完全没有必要的
For Each dr1 As DataRow In dt.DataRows
    DataTables("表B").replacefor("f_ye", dr1("f_ye")  ,"f_zh='" & dr1("f_zh") & "'")
Next

如果是想从表A更新到表B,直接使用sql

updatb set a.f_ye = b.f_ye from 表B as b inner join 表A as a where a.f_zh=b.f_zh

 回到顶部
帅哥哟,离线,有人找我吗?
huaziqiao1976
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:幼狐 帖子:137 积分:1175 威望:0 精华:0 注册:2020/9/28 9:41:00
  发帖心情 Post By:2023/8/23 14:18:00 [只看该作者]

updatb set a.f_ye = b.f_ye from 表B as b inner join 表A as a where a.f_zh=b.f_zh

请救下蓝板,里面的a b 是不是等同于{表A} {表B}

 回到顶部
帅哥,在线噢!
有点蓝
  6楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:110764 积分:563752 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2023/8/23 14:24:00 [只看该作者]


 回到顶部