我们得到了一个运行了数年的遗留vb.net应用程序,但它昨天突然停止工作,并导致sql server超时。大部分应用程序都会出现超时错误,例如,其中一部分代码如下:
command2 = New SqlCommand("select * from Acc order by AccDate,AccNo,AccSeq", SBSConnection2)
        reader2 = command2.ExecuteReader()
    If reader2.HasRows() Then
        While reader2.Read()
            If IndiAccNo <> reader2("AccNo") Then
                CAccNo = CAccNo + 1
                CAccSeq = 10001
                IndiAccNo = reader2("AccNo")
            Else
                CAccSeq = CAccSeq + 1
           End If
            command3 = New SqlCommand("update Acc Set AccNo=@NewAccNo,AccSeq=@NewAccSeq where AccNo=@AccNo and AccSeq=@AccSeq", SBSConnection3)
            command3.Parameters.Add("@AccNo", SqlDbType.Int).Value = reader2("AccNo")
        command3.Parameters.Add("@AccSeq", SqlDbType.Int).Value = reader2("AccSeq")
          command3.Parameters.Add("@NewAccNo", SqlDbType.Int).Value = CAccNo
        command3.Parameters.Add("@NewAccSeq", SqlDbType.Int).Value = CAccSeq
      command3.ExecuteNonQuery()
    End While
End If它是有效的,现在在命令3中给出了超时。()有什么想法吗?
在网络上没有任何改变,应用程序使用本地数据库,主要问题是即使在开发环境中,它也不再工作
发布于 2010-05-25 20:33:07
您可以将更新重写为单个查询。这将比原始查询运行得快得多。
UPDATE subquery
SET AccNo = NewAccNo, AccSeq = NewAccSeq
FROM
    (SELECT AccNo, AccSeq, 
        DENSE_RANK() OVER (PARTITION BY AccNo ORDER BY AccNo) NewAccNo,
        ROW_NUMBER() OVER (PARTITION BY AccNo ORDER BY AccDate, AccSeq)
            + 10000 NewAccSeq
     FROM Acc) subqueryhttps://stackoverflow.com/questions/2903646
复制相似问题