【问题标题】:VB6 - How to execute multiple SQL queries in one callVB6 - 如何在一次调用中执行多个 SQL 查询
【发布时间】:2018-09-14 19:32:11
【问题描述】:

我在 VB6 中有一个旧的慢程序,它使用 ADO 在许多调用中运行许多 sql 查询。它花费了太多时间。我想测试是否在一个查询中发送所有查询(其中大多数只是更新或插入)以节省网络和调用时间。我该如何实现这一点,并建议这是否会节省时间并提高性能?

    qry = "Update table1 Set col1 = 'eerere' Where 1=1"
    qry = qry & vbCrLf & "  AND MyID = " & MyID & vbCrLf
    ExecSQL qry, DBCon, adAsyncExecute

    qry = "Insert Into TableMain"
    qry = qry & "Select  col1,col2,col3 from Table2 Where 1=1"
    qry = qry & vbCrLf & "  AND MyID = " & MyID & vbCrLf
    ExecSQL qry, DBCon, adAsyncExecute

    qry = "Update table5 Set col1 = 'eerere' Where 1=1"
    qry = qry & vbCrLf & "  AND MyID = " & MyID & vbCrLf
    ExecSQL qry, DBCon, adAsyncExecute

【问题讨论】:

  • 为什么不把它移到存储过程中呢?然后你的所有代码都集中在一个地方。请考虑参数化您的查询。您这里的模式容易受到 sql 注入的影响。
  • 为什么要花几个小时?高音量?逐行插入/更新?它需要多快?
  • 是的,这是我的第一个想法。但是代码太复杂了,不能冒1000个bug的风险。已经分析过

标签: sql-server vb6 ado


【解决方案1】:

您可以通过用分号分隔命令将它们组合成一个调用:

qry = "Update table1 Set col1 = 'eerere' Where 1=1"
qry = qry & vbCrLf & "  AND MyID = " & MyID & "; " & vbCrLf

qry = qry & "Insert Into TableMain"
qry = qry & "Select  col1,col2,col3 from Table2 Where 1=1"
qry = qry & vbCrLf & "  AND MyID = " & MyID & "; " & vbCrLf

如果不会导致任何错误,它可能会给您带来一些小的性能改进。

【讨论】:

  • 您没有连接第二个查询 - 应该是 qry = qry & "Insert Into TableMain"
  • @MarkL 不错。固定。
最近更新 更多