【问题标题】:Unique constraint on table with existing data具有现有数据的表的唯一约束
【发布时间】:2016-09-03 02:42:23
【问题描述】:

我希望为大约 1/2 百万行左右的现有表的 1 个 int 列添加唯一约束。我还看到提到使用过滤索引。但是,如果您想稍后(或已经拥有)引用这些列的外键,创建过滤索引是否会出现问题?

如果某些行已经无效,我可以添加唯一约束吗?如果约束失败,我想停止进一步的插入。

ALTER TABLE dbo.MyTable
ADD CONSTRAINT UX_mycnstrtname UNIQUE([col1])

实际上,如果我在一列中已经有重复的记录,则上述操作将失败。

所以,使用过滤索引,就像这样:

CREATE UNIQUE NONCLUSTERED INDEX [UX_1PerX] ON [dbo].[MyTable]
(
    [TableID] ASC
)
WHERE (ID > 888876)

我现在的问题是 - 这会导致引用此列 (TableID) 的外键出现任何问题吗?

【问题讨论】:

  • 这里的问题是什么?如果数据不是唯一的,那么唯一约束将失败

标签: sql-server-2008 tsql


【解决方案1】:

通过查看无效行是否意味着您有正确的重复记录?你会得到以下错误:

The CREATE UNIQUE INDEX statement terminated because a duplicate key was found for the object name 'dbo.myTable' and the index name 'UX_mytable_num'. The duplicate key value is (1).

您需要使它们唯一创建唯一索引。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多