none
关于sql server 在重复数据的基础上添加唯一约束的问题 RRS feed

  • 常规讨论

  • 表中以前是有重复的数据,但是由于业务需要以后是不允许有重复的数据且不能删除以前的重复数,为BoxCode添加唯一约束,

    表:

    CREATE TABLE [dbo].[T_Base_TrayBox](
    [TrayCode] [nvarchar](50) COLLATE Chinese_PRC_CI_AS NOT NULL,
    [BoxCode] [nvarchar](50) COLLATE Chinese_PRC_CI_AS NOT NULL,
    [Scale] [int] NOT NULL,
    [Id] [int] IDENTITY(1,1) NOT NULL,
     CONSTRAINT [PK_T_Base_TrayBox] PRIMARY KEY CLUSTERED 
    (
    [Id] ASC
    )WITH (PAD_INDEX  = OFF, IGNORE_DUP_KEY = OFF) ON [PRIMARY]
    ) ON [PRIMARY]

    sql语句为: alter table T_base_traybox with nocheck
     add constraint U_T_base_traybox_constraint_BoxCode unique (BoxCode)

    错误信息:

    消息 1505,级别 16,状态 1,第 4 行
    CREATE UNIQUE INDEX 语句终止,因为发现对象名称 'dbo.T_Base_TrayBox' 和索引名称 'U_T_base_traybox_constraint_BoxCode' 有重复的键。重复的键值为 (0000731383)。
    消息 1750,级别 16,状态 0,第 4 行
    无法创建约束。请参阅前面的错误消息。
    语句已终止。

    跪求大神指导!!!


    • 已编辑 1sky1 2018年6月15日 8:41
    • 已更改类型 1sky1 2018年6月19日 8:15 没有解决问题
    2018年6月15日 8:14

全部回复

  • Trigger

    SQL Server 2016 ~ 2000 性能优化、方案设计 QQ:315054403 田园嘉兴

    2018年6月16日 4:27
  • Hi 1sky1,

    使用trigger可以参考以下的脚本:

    CREATE TRIGGER MyTrigger ON dbo.MyTable
    AFTER INSERT
    AS
    
    if exists ( select * from table t 
        inner join inserted i on i.name=t.name and i.date=t.date and i.id <> t.id)
    begin
        rollback
        RAISERROR ('Duplicate Data', 16, 1);
    end
    go

    Best Regards,

    Teige


    MSDN Community Support
    Please remember to click "Mark as Answer" the responses that resolved your issue, and to click "Unmark as Answer" if not. This can be beneficial to other community members reading this thread. If you have any compliments or complaints to MSDN Support, feel free to contact MSDNFSF@microsoft.com.

    2018年6月18日 6:13
    版主
  • NOCHECK 仅艇于 CHECK 或 FOREIGN KEY 约束

    如果有条件能够区分现在的数据和将来的数据,你可以考虑用筛选索引

    2018年6月19日 9:38
  • 必须删除重复的记录才可以添加唯一性约束。

    "不能删除以前的重复数‘,可以通过group by 语句将重复的数据找出来,为它重命名。

    select boxcode from T_Base_TrayBox group by boxcode having (count(*) >1 )


    专注于.NET ERP/CRM开发框架,C/S架构,SQL Server + ORM(LLBL Gen Pro) + Infragistics WinForms

    2018年6月20日 0:26