查询某个表报可能发生了架构损坏。请运行 DBCC CHECKCATALOG。,在日志也会记录。
通过DBCC CHECKCATALOG 查出来提示:
消息 3858,级别 16,状态 1,第 1 行
sys.objects 中的行(object_id=25068742)的属性(type=)具有无效的值。
消息 3858,级别 16,状态 1,第 1 行
sys.objects 中的行(object_id=25068742)的属性(namespace_class=219)具有无效的值。
消息 3853,级别 16,状态 1,第 1 行
sys.columns 中的行(object_id=183059788,column_id=8)的属性(default_object_id=199059845)在 sys.objects 中没有匹配的行(object_id=199059845)。
DBCC 执行完毕。如果 DBCC 输出了错误信息,请与系统管理员联系。
查过sys.objects表没匹配的行,发现是某个表的约束在sys.objects表中缺少一行记录。
为什么会缺少了?现在如何补上?不然一查那个表就报错。CHECKDB \CHECKTABLE 都没用。
------解决方案--------------------
sys.objects 中的行(object_id=25068742)的属性(type=)具有无效的值。 消息 3858,级别 16,状态 1,第 1 行 sys.objects 中的行(object_id=25068742)的属性(namespace_class=219)具有无效的值。 消息 3853,级别 16,状态 1,第 1 行 sys.columns 中的行(object_id=183059788,column_id=8)的属性(default_object_id=199059845)在 sys.objects 中没有匹配的行(object_id=199059845)。 DBCC 执行完毕。如果 DBCC 输出了错误信息,请与系统管理员联系。
---------------------
select * from sysobjects where id=25068742 -->查询是哪个表
select * from sysobjects where id=183059788 -->查询是哪个表
select a.name,b.name
from sysobjects a inner join syscolumns b on a.id=b.id
where a.id=183059788 -->查询是哪个表哪一列?
select * from sysobjects where id=199059845
-->查询是哪个表
------解决方案--------------------
尝试:
1、重建该表聚集索引
2、试试select * into 新表 from 有问题的表 ,然后删除这个有问题的表,把新表重命名。