交替重复执行。
dbcc checkdb ('kmjxc',repair_allow_data_loss) --
修复数据库
dbcc checkdb ('kmjxc',REPAIR_REBUILD) --
修复数据库索引
修复步骤
4
:查询错误
ID
的表名
在修复数据库的过程中,如果有出现个别错误是某个表损坏,会有提示表
ID
,可使用
以下语句查询这个
ID
是哪张表,再针对这张表进行修复。
SELECT * FROM sysobjects where id = ‘
此处填入表
ID’ --
查询错误
ID
的表名
修复步骤
5
:修复表、表索引
使用以下语句进行数据库修复,先执行修复表,再执行修复表索引,这两个可交替重复
执行。
dbcc checktable ('
此处填入表名
',repair_allow_data_loss) --
修复表
dbcc checktable ('
此处填入表名
',REPAIR_REBUILD) --
修复表索引
修复步骤
6
:设置数据库为多用户
修复完成后,需要将数据库设置成多用户模式
EXEC sp_dboption 'kmjxc', 'single user', 'false'
修复步骤
7
:发生键次错误,索引重复的处理方法
以
pos_t_saleflow_pre
表为例在
SQL
查询分析器的左侧,找到
pos_t_saleflow_pre
表,展
开,在约束中找到以
PK
开头的主键约束,右键
–
在新窗口中编写对象脚本为
–
创建,将
创建出来的脚本保存作个备份,记住脚本中是以哪个字段为主键(以下语句中会使用到,因
语句中以主键分组来查询是否有重复),然后再右键删除此主键约束,再使用以下语句查询
是否有重复值,如果有,则删除。删除重复值后,再用备份的脚本重新创建主键。
--
查询是否存在重复的数据
dbcc checktable('pos_t_saleflow_pre')
select flow_no, flow_id
from pos_t_saleflow_pre
group by flow_no, flow_id
having count(1) > 1
--
删除表中重复的数据
while exists(select flow_no, flow_id
from pos_t_payflow_pre
group by flow_no, flow_id
having count(1) > 1)
begin
set rowcount 1
delete a
from pos_t_payflow_pre a
inner join (select flow_no, flow_id
from pos_t_payflow_pre
group by flow_no, flow_id
having count(1) > 1) b on a.flow_no = b.flow_no and a.flow_id = b.flow_id
set rowcount 0