约束 - 独特或空洞

时间:2009-02-25 10:10:29

标签: sql sql-server-2005

表中有一个允许空值的nvarchar列。一旦有非空值,它必须是唯一的。

是否可以在没有触发器的情况下定义此规则?

编辑:

http://decipherinfosys.wordpress.com/2007/11/30/multiple-null-values-in-a-unique-index-in-sql-serverdb2-luw/

是一个很好的解决方法。我看到的唯一问题是主键可能在某些时候与我想要唯一的列中的一个值相同。这就是为什么我添加了一个固定字符串,我知道它永远不会出现在约束列中。

2 个答案:

答案 0 :(得分:1)

http://decipherinfosys.wordpress.com/2007/11/30/multiple-null-values-in-a-unique-index-in-sql-serverdb2-luw/

中的唯一键列中存在多个NULL值的解决方法

基本上在文章中他们制作了一个额外的专栏,他们保持独特。如果您的原始列为null,则会将其内容复制到唯一列中。只要它为null,主键就会复制到列中。这是一种解决方法,但它应该有效。

答案 1 :(得分:1)

tehvan发布的链接中未提及的一个解决方案是索引视图。 (创建一个视图,排除具有空列值的行,并在视图上添加唯一索引)。

如果您不想向基表添加其他列,则可能首选此方法。这两种方法都需要您启用正确的ANSI设置。