1

我有一个 SQL Server 数据库。其中一个表有一个列,由于缺少更好的词,该列被损坏。我可以选择 * 甚至选择那个特定的列,它工作正常。我可以毫无问题地对所有其他列执行计数、排序和分组等功能。但是,如果我尝试在这一列上执行其中一项功能,则会出错并显示以下消息:错误:(状态:S1000,本机代码:E28)

另外,我使用winsql连接到数据库。

有没有人见过这种行为?

附加信息:

select colname from tablename

工作正常

select colname from tablename order by colname

产生错误

4

2 回答 2

2

尝试重建索引。我有类似的问题,重建索引修复了它。在另一种情况下,重建索引不起作用,所以我不得不恢复每晚的备份。谢天谢地,我们对开发数据库进行了夜间备份。

于 2009-10-06T15:16:40.577 回答
1

如果 SQL 数据库报告损坏/这确实是损坏 - 开始非常小心。损坏可能会以 823 / 824 和其他高严重性错误开始表现出来。保持冷静并运行 DBCC CheckDB - 找出损坏的程度。不要分离它或开始执行随机操作。

在继续之前,您应该对事务日志进行日志备份 - 如果您被迫恢复,您可能需要它。我可能会使用 COPY_ONLY 选项。

CheckDB 可能需要一些时间,但让它完成并查看报告了多少损坏,以及报告了哪些对象。

NC 索引的损坏可以通过索引重建轻松解决,损坏页面的损坏将更加困难。

如果 CheckDB 拒绝完成并且本身出错,那么您遇到了一个真正的问题,您将导出您可以/从备份中恢复的数据。

阅读腐败和发现/修复/游戏结束时的最佳地点之一是 Paul S. Randal 的博客。http://www.sqlskills.com/blogs/paul/

这仅适用于您真正关注的是腐败而不是一段狡猾的 SQL。

于 2009-10-06T15:36:00.750 回答