首先查询是那些表出现故障了,你可以使用
EXEC sp_MSforeachtable @command1='select top 1 * from ?'
只要返回错误的就记下这个表。试着用dts导出这个表。然后回到sysindexes中删除刚刚查询到的出现故障的项目。
删除时必须要进入紧急模式,方法是:Use Master
Go
sp_configure 'allow updates', 1
reconfigure with override
Go根据刚刚导出的表试着重建一下表。

解决方案 »

  1.   

    别忘了,先备份一下库。
    重建表后,再次运行dbcc checkdb检查一下
      

  2.   

    谢谢suntt,但现在是我在导出错误表的时候提示对象无法复制,有错误啊.
      

  3.   

    这样吧
    1.建立一个新库,先将数据用dts导入到这个新库中。
    2.若实在是没有办法导入,那你试试建立一个新表,结构与损坏的表的一致,包括索引。
    3.获取损坏表的id:
    select id from 损坏库..sysobjects where name='errortable' and type='u'
    4.获取新建库的结构表id
    select id from 新建库..sysobjects where name='新建表' and type='u'然后进入紧急模式,删除损坏库中的sysindexes.id=刚刚获取的损坏库的id值
    DELETE sysindexes WHERE id=损坏的id值INSERT INTO 损坏库..sysindexes(...) select 损坏的id,,,,,,, from 新建库..sysindexes where id=新建id5.再次运行dbcc checkdb试试
      

  4.   

    suntt,我这两天太忙,没来这里。
    我再试下你说的方法。
    损坏的表中有大量数据需要使用
      

  5.   

    若你有以前的备份,可使用老备份将损坏的表的结构的sysindexes中的信息insert into 损坏库中 
    sysindexes
      

  6.   

    suntt:我按照你的方法做,在进行到删除sysindexes中的错误表记录的时候,提示如下错误:服务器: 消息 601,级别 12,状态 3,行 1
    由于数据移动,未能继续以 NOLOCK 方式扫描。
    服务器: 消息 823,级别 24,状态 2,行 1
     连接中断还有就是直接把备份的表的结构的sysindexes中的信息insert into 损坏库中 
    sysindexes中提示列名不对称的错误。  郁闷啊 
      

  7.   

    建议重建master数据库
      因为这样错误,你不是很清楚内部机制的话,很容易造成数据库启动不来,越弄越坏。
      

  8.   

    mssql是重新安装的,master应该不会有问题吧
      

  9.   

    823错误是IO错误,检查硬盘是否有损坏。
    运行
    dbcc checkdb(dbname) with PHYSICAL_ONLY
    看看是否有错误返回