解释
当使用 NOLOCK 锁定提示或设置为 READ UNCOMMITTED 的事务隔离级别扫描时,可能会删除扫描当前位置处的页。当这种情况发生时,Microsoft® SQL Server™ 将无法继续扫描。对策
该错误终止查询。重新提交查询或删除 NOLOCK 锁定提示,即不要用WITH (NOLOCK)。

解决方案 »

  1.   

    也可能是数据库有问题,参考以下:1.1 SQL SERVER数据库的检测 SQL SERVER提供了数据库检测的命令,可用DBCC CHECKDB对数据库中各个对象的分配及结构的正确性进行检测,并可通过一参数控制,将所有的错误信息显示出来。其语法如下: 
    DBCC CHECKDB 
    ('database_name' [,NOINDEX | { REPAIR_ALLOW_DATA_LOSS | REPAIR_FAST | REPAIR_REBUILD }] 
    ) [WITH {ALL_ERRORMSGS | NO_INFOMSGS}] 参数说明: 
    'database_name'代表被检测的数据库实体名; 
    NOINDEX指非系统表的非聚族索引不检测; 
    REPAIR_ALLOW_DATA_LOSS | REPAIR_FAST| REPAIR_REBUILD 指直接修复发现的错误,其中REPAIR_ALLOW_DATA_LOSS代表,若此错误不能修复时,系统将直接删除相关数据。带此三个参数的任一个时,数据库必须处于单用户模式,可在Enterprise Manager中的数据库属性中设置; 
    ALL_ERRORMSGS代表将检测到的错误信息全部显示出来,否则,对于每张表最多只显示200条错误信息; 
    NO_INFOMSGS代表隐藏所有的信息及占用空间的报告。 
    经过检测,对于错误的对象,将以OBJECT ID的形式报告具体出错的信息,可根据OBJECT ID到系统表sysobjects中查找到相关的表,即NAME。 
    1.2 SQL SERVER问题数据库的修复 经过数据库检测后,可针对出现的问题采取相应的措施进行处理。
    如通过检测后,发现对象的物理存放存在问题,可用DBCC CHECKALLOC来进行修复: 
    DBCC CHECKALLOC ('database_name' | REPAIR_REBUILD }] ) [WITH {ALL_ERRORMSGS | NO_INFOMSGS}] 
    若是非系统对象的索引出错,则可用DBCC DBREINDEX进行修复: 
    DBCC DBREINDEX ( [ 'database.owner.table_name' [, index_name [, fillfactor ] ] ] ) [WITH NO_INFOMSGS] 
    以上两种情况,也可直接使用DBCC CHECKDB(‘db_name’,repair_rebuild)来修复。 另外一种情况是在进行检测时,提示无法建立数据连接,此时表明,数据库已损坏。
    对于这种情况,我们可采取如下措施来尝试修复。 
    (1)在SQL Enterprise中新建一数据库(如数据库名为test)
    (2)停止SQL Server Service Manager,并将客户数据库的MDF文件更名为test _data.mdf(即新建数据库的主文件名)
    (3)用更名后的文件覆盖新建数据库同名文件,接着,启动SQL Server Service Manager
    (4)对Master数据库将系统表设置为可更改状态
     
    Use Master 
    go
    sp_configure 'allow updates', 1
    go 
    reconfigure with override 
    go 
    --将数据库设为紧急状态: 
    update sysdatabases set status = 32768 where name = ' database ' 
    --停止并重新启动SQL Server Service Manager,并重建Log文件: 
    dbcc traceon (3604)
    go 
    dbcc rebuild_log ('test','test_log.ldf') 
    go
    --将数据库设置为单用户模式,然后进行检测: 
    sp_dboption 'test', 'single user', 'true' 
    go
    dbcc checkdb('test') 
    go 
    此数据库执行CHECKDB的过程中发现一些表的索引被破坏,于是针对具体的表进行重建索引的操作: 
    dbcc dbreindex(tablename)
    go
    如执行以上操作仍然不能解决,若索引破坏的表是临时表或不是关键表,则可从新建账套中引入,若是主表,则可能通过近期的备份来(部份)恢复。若没有一个备份,则无法修复。