包含现有数据的表的唯一约束

时间:2016-09-02 17:57:05

标签: sql-server-2008 tsql

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

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

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)?

1 个答案:

答案 0 :(得分:0)

查看无效行,表示您的重复记录是否正确?你会得到以下错误:

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).

你需要让它们独特创造独特的索引。