2009-10-06 130 views
1

我有一个SQL Server数据库。其中一个表格有一列,因为缺少一个更好的单词,它的行为已被破坏。我可以选择*或者甚至选择特定的列并且工作正常。我可以执行诸如count,order by和group by之类的函数,而不会出现任何问题。但是,如果我尝试在这一列上执行这些功能之一,则会出错并显示以下消息:错误:(状态:S1000,本机代码:E28)数据库中的列已损坏

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

有没有人见过这种行为?

附加信息:

select colname from tablename

工作正常

select colname from tablename order by colname

产生错误

+0

你能发表一些代码吗? – 2009-10-06 15:12:10

+1

错误是什么? – 2009-10-06 16:42:50

+0

这似乎是一个服务器故障问题,但我不愿意迁移它,因为它与编程有关。你可能会问它(serverfault.com)是否有人在SF可以帮助你。如果你在SF上找到一个,请在这里给出答案。 – 2009-10-06 17:16:31

回答

2

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

1

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

在继续进行之前,您应该采取事务日志的日志备份尾巴 - 如果您被迫恢复,您可能需要它。我可能会采取与COPY_ONLY选项。

CheckDB可能需要一些时间,但让它完成,看看有多少腐败正在报告,以及他们被报告什么对象。

通过索引重建可以很容易地解决数控指标的腐败问题,撕裂页面的损坏将变得更加困难。

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

其中一个最好的地方阅读腐败和查找/修复/当它的游戏结束是保罗S. Randal的博客。 http://www.sqlskills.com/blogs/paul/

这只适用于你真正在查看腐败而不是一些狡猾的SQL。

+0

“按列名选择* from tablename order”算作dodgy sql吗? – Kevin 2009-10-06 16:23:51

+0

它不应该是,而是通过SQL mgmt studio来运行它,以确保在服务器上执行任何操作之前,不会有任何干扰。如果失败,请记下错误消息并开始谨慎行事。 – Andrew 2009-10-06 16:29:00