修复数据库DBCC报错。
2018-08-24    耿朋亮
1503 0
用于解决修复数据DBCC报错,提示索引名称'PK_PPM_*****'有重复的键,重复键值为(*****-****-*****-****)的问题。
  • 问题说明

    如下面报错:

    消息 1505,级别 16,状态 1,第 1 行
    CREATE UNIQUE INDEX 语句终止,因为发现对象名称 'dbo.PPM_ProduceFlowRecord' 和索引名称 'PK_PPM_ProduceFlowRecord' 有重复的键。重复的键值为 (2658cc15-f0ef-4f88-9969-5e513ac94348)。
    消息 1505,级别 16,状态 1,第 1 行
    CREATE UNIQUE INDEX 语句终止,因为发现对象名称 'dbo.SYS_OperationLog' 和索引名称 'PK_SYS_OperationLog' 有重复的键。重复的键值为 (4101d33b-db37-4f15-a0e6-003dfd8ce3a2)。
    消息 1505,级别 16,状态 1,第 1 行
    CREATE UNIQUE INDEX 语句终止,因为发现对象名称 'dbo.SYS_OperationLog' 和索引名称 'IX_SYS_OperationLog_Sys4CreateTime' 有重复的键。重复的键值为 (07  3 2018  9:06PM, 85df07dc-2096-41bd-962f-5b776c6953a7)。

  • 解决方法

    解决方法:

    在Sql2005数据管理器页面-->新建查询-->执行脚本

    或者在数据管理器页面-->指令操作-->执行脚本

    --首先现将此表抛异常的字段主键删除!!!!    找到表-右键-设计或者修改表-找到ID,右键删除主键即可

    --然后检查是否有重复
    select ID from 表名 group by id having (count(1)>1)  或者 select code from 表名 group by code having (count(1)>1)

    --有的话进行下面操作

    --第一步
    alter table 表名 add ids int identity(1,1)

    --第二步
    Begin
        declare cursorTEMP SCROLL Cursor
        for select ID from 表名 group by id having (count(1)>1)
        declare @temp_Id uniqueidentifier  或者  declare @temp_Id navrchar(100)

        OPEN cursorTEMP

        FETCH NEXT FROM cursorTEMP INTO @temp_Id
        while(@@FETCH_STATUS=0)
        Begin                               

             delete from 表名  where ids not in(select max(ids) from 表名 where id=@temp_Id)         

             and id=@temp_Id
             
             --移动到下一条
            FETCH NEXT FROM cursorTEMP INTO @temp_Id
        End

        Close cursorTEMP
        DEALLOCATE cursorTEMP
    End

    --第三步
    alter table 表名 drop column ids


    --最后,再把对应列的主键设置回去!!!    找到表-右键-设计或者修改表-找到ID,右键设置为主键即可

该文章对您有用吗?

非常感谢,您的反馈对我们很有价值!

客服电话

4006757966

微信公众号

联系我们

印特3系演示版

申请

印特5系演示版

申请

免费试用

印特软件标准演示版下载申请

请您填写您的一些信息,提交您的申请后,我们会在两个工作日内进行处理,并回复您一封邮件,内附下载链接,请您注意查收。
*
请输入正确的公司名称
*
请输入正确的联络人员
*
请输入正确的联络电话
提交申请
关闭