更改现有列以使其唯一

时间:2013-12-19 15:32:16

标签: sql sql-server sql-server-2008 sql-server-2008-r2

我有一个'用户'表,我想让'Phone'列独一无二。目前,“PhoneNumber”列允许为null。我正在使用以下脚本。

ALTER TABLE dbo.Users
ADD CONSTRAINT Unique_PhoneNumber 
UNIQUE NONCLUSTERED (PhoneNumber)

问题是,'用户'表中有300多行。其中一半有Null值。当我运行脚本时,它说成功完成。但是,在管理工作室中刷新表约束后,约束未显示,并且在添加新用户时未应用于该列。

注意:如果我再次尝试运行脚本,则会出现重复错误,例如约束已经存在。

任何人都知道我需要做什么才能让这个专栏独一无二?

1 个答案:

答案 0 :(得分:0)

查看sp_help过程中的“索引”(假设SQL Server): sp_help 'dbo.Users'。 “唯一约束”实际上是唯一索引。如果您创建普通唯一索引,则字段中允许最多一个null值。要从检查中排除空值,您需要创建唯一的过滤索引,如下所示:

create unique index Unique_PhoneNumber on dbo.Users(PhoneNumber) where (PhoneNumber is not null)