none
Could not continue scan with NOLOCK due to data movement RRS feed

  • 问题

  • Dear all:

    在SQLServer2000的環境中某些sql語句報錯如下,

    Could not continue scan with NOLOCK due to data movement。

    SQLServer2000版本為8.0.2055.

    看微軟官網,說需要最新的補丁,但是我們這個已經是最新的了。

    另外在網上也有人說 是數據庫出了問題,但是我們做了DBCC CHECKDB之后,未發現任何錯誤。

    執行的sql語句如下:

     

    SELECT TOP 170
          ordnum,
          mesgid
    FROM purchaseordersmain(nolock)
    WHERE (comuploadflag='N' OR comuploadflag='P' OR comuploadflag='E')
    and uploadflag='Y'
    and plantcode='MIDC'
    and sono is not null
    ORDER BY lasteditdt


    If you haven't all the things you want,be grateful for the things you don't have that you didn't want.
    2010年5月7日 0:29

答案

  • nolock 是不锁表的, 允许读脏数据, 由于这部分数据具有不确定性, 所以在数据变化频繁的表上做 NOLOCK 查询的时候就可能出来这种问题.

    你可以考虑不使用 NOLOCK 的查询方式, 或者是在出错后重试.

    这个即不是 BUG, 也不是数据出了问题, 而是在 NOLOCK 的方式下读取数据的一种现象而已.

    2010年5月7日 4:15

全部回复

  • May happen if reindex runs at that time.
    2010年5月7日 2:05
  • nolock 是不锁表的, 允许读脏数据, 由于这部分数据具有不确定性, 所以在数据变化频繁的表上做 NOLOCK 查询的时候就可能出来这种问题.

    你可以考虑不使用 NOLOCK 的查询方式, 或者是在出错后重试.

    这个即不是 BUG, 也不是数据出了问题, 而是在 NOLOCK 的方式下读取数据的一种现象而已.

    2010年5月7日 4:15
  • 感謝大家的回復
    If you haven't all the things you want,be grateful for the things you don't have that you didn't want.
    2010年5月7日 5:45