【问题标题】:SQL Server 2008 - Multiple Updates WIth LoopSQL Server 2008 - 循环多次更新
【发布时间】:2013-12-09 21:58:10
【问题描述】:

我正在寻找一种加快 SQL 速度的方法,因为我认为我没有有效地执行它,虽然它可以工作但当有更多记录时非常慢。

我正在使用 ASP/VBScript,但这是 SQL 更新问题。

我有一个循环FOR, NEXT, 捕获提交表单和过程来捕获SortNum 提交。

for x = 1 to request.form.count
    ' -- Some where here, I captured the SortNum that associated with RecID
     SortNum = TheCapturedRowNum
     TheRecID = TheCapturedRecID

     sql_UpdateSortNum = "Update Table1 SET SortNum = '"& SortNum &"' where RecID = '"& TheRecID "'"
     conn.execute(sql_UpdateSortNum)
Next

目前,它正在工作,但记录越多(超过 50 条记录),它就会变得越慢。我想这是循环并继续执行更新查询的不好方法。有没有办法加快更新速度,比如存储和更新一次?请注意SortNum 的值不是 FOR 循环的 (x)。

任何建议将不胜感激,

谢谢,

【问题讨论】:

    标签: sql sql-server-2008


    【解决方案1】:

    1/ 将“request.form”中的所有行发送到存储过程(作为具有XML data typetable value parameter 的参数)然后使用UPDATE FROM 语句。

    这种方式将避免对数据库的来回调用。

    2/ 如果您不想修改太多代码,并且如果您有合理数量的行要更新,您可以加入更多更新语句(假设批量有大约 50 个更新语句)并发送它们一起到DB:

    "Update Table1 SET SortNum =...;Update Table1 SET SortNum =...;Update...;"
    

    【讨论】:

    • 抱歉,我不确定我是否理解。所以,我仍然需要循环,但不是在我的代码中使用 Update,我应该创建一个带有 2 个参数(RecID、SortNum)的存储过程,然后在我的存储过程中使用 Update SQL,对吗?基本上,我仍然需要遍历存储过程并将 2 个参数提供给更新存储过程?任何例子,将不胜感激!
    • @milacay 您应该遍历您的记录并创建一个 XML 格式的字符串。然后,将该字符串发送到接受 XML 参数的存储过程。
    • @milacay:UPDATE FROM 允许您在单个 UPDATE 语句中更新更多行。
    • 我之前没有做过UPDATE FROM,但我会研究一下。无论如何,您是否有该 XML 和 UPDATE FROM 示例的任何参考链接?感谢您的帮助。
    • @milacay:点击我回答中的链接。
    猜你喜欢
    • 2018-10-28
    • 1970-01-01
    • 2014-02-10
    • 1970-01-01
    • 1970-01-01
    • 2010-12-25
    • 2015-06-29
    • 1970-01-01
    • 2020-07-08
    相关资源
    最近更新 更多