我有一个SQL Server数据库。其中一个表有一个列,由于缺少一个更好的词,它的行为已被破坏。我可以选择*甚至选择那个特定的列,它工作正常。我可以执行所有其他列上的count,order by和group by等功能,没有任何问题。但是,如果我尝试在这一列上执行其中一个函数,则会出现以下错误:错误:(状态:S1000,本机代码:E28)
另外,我使用winsql连接到数据库。
以前有没有人见过这种行为?
其他信息:
select colname from tablename
工作正常
select colname from tablename order by colname
产生错误
答案 0 :(得分:2)
尝试重建索引。我有类似的问题,重建索引修复它。在另一种情况下,重建索引不起作用,所以我不得不恢复夜间备份。谢天谢地,我们为开发数据库进行了夜间备份。
答案 1 :(得分:1)
如果SQL数据库报告损坏/这确实是腐败 - 开始非常小心。腐败可能会以823/824和其他高严重性错误开始显现。保持冷静并运行DBCC CheckDB - 找出损坏的程度。不要拆卸它或开始执行随机操作。
在继续之前,您应该对事务日志进行日志备份 - 如果您被迫恢复,则可能需要它。我可能会选择COPY_ONLY选项。
CheckDB可能需要一些时间,但让它完成,看看报告了多少次损坏,以及它们被报告的对象。
通过索引重建可以轻松解决NC索引的损坏,破坏页面的损坏将更加困难。
如果CheckDB拒绝完成并且错误本身,那么您就会遇到一个真正的问题,并且会从备份中导出/恢复哪些数据。
关于腐败和寻找/修复的最好的地方之一是Paul S. Randal的博客。 http://www.sqlskills.com/blogs/paul/
这仅适用于您真正关注的是腐败而不是一个狡猾的SQL。