更新 SQL 表的某一列中的多行时,如何跳过锁定的行或更新时间过长的行

问题描述 投票:0回答:1

该应用程序使用 ASP.NET Web 表单在 .NET 中进行编码。我正在尝试更改数百个订单号的

Priority
代码。

要分配的新代码是用户在 GridView 中订单号旁边的下拉列表中选择的代码。

这是我的 SQL 更新语句,当用户单击更新按钮时执行:

for (int i = 0; i < GridView1.Rows.Count; i++)
{
    DropDownList PTY_CHANGE = (DropDownList)GridView1.Rows[i].FindControl("PTY_CHANGE");
    
    cnn3.Open();
                    
    query = @"
BEGIN TRAN T1
    UPDATE DATAORDERS
    SET DATAORDERS.PRIORITYCODE =@PTYCODE
    WHERE DATAORDERS.ORDERNO  =@ORDERNO
COMMIT TRAN T1";
    
    SqlCommand cmd = new SqlCommand(query, cnn3);
     
    cmd.Parameters.AddWithValue("@PTYCODE ", PTY_CHANGE.SelectedItem.Value);     
    cmd.Parameters.AddWithValue("@orderno", GridView1.Rows[i].Cells[0].Text);
     
    cmd.CommandTimeout = 180;       
    cmd.ExecuteReader();
       
    cnn3.Close();
}

我遇到的问题是某些订单被锁定(很可能公司中的其他人正在不同的模块中处理该订单),因此代码就会停止。

我想跳过该订单,然后尝试更新列表中的下一个订单号。

谢谢您的帮助。

c# sql .net sql-server-2008
1个回答
0
投票

READPAST 指定数据库引擎不读取被其他事务锁定的行。

BEGIN TRAN T1
  UPDATE DATAORDERS WITH (READPAST)
  SET DATAORDERS.PRIORITYCODE =@PTYCODE WHERE DATAORDERS.ORDERNO =@ORDERNO
COMMIT TRAN T1
© www.soinside.com 2019 - 2024. All rights reserved.