表中有一个允许空值的nvarchar列。一旦有非空值,它必须是唯一的。Contraint - 唯一或空
是否可以在没有触发器的情况下定义此规则?
编辑:
是一个很好的解决方法。我看到的唯一问题是主键可能在某些时候与我希望是唯一的列中的某个值相同。这就是为什么我添加一个固定的字符串,我知道从来没有出现在约束列中。
表中有一个允许空值的nvarchar列。一旦有非空值,它必须是唯一的。Contraint - 唯一或空
是否可以在没有触发器的情况下定义此规则?
编辑:
是一个很好的解决方法。我看到的唯一问题是主键可能在某些时候与我希望是唯一的列中的某个值相同。这就是为什么我添加一个固定的字符串,我知道从来没有出现在约束列中。
有一个变通的唯一键中的列多NULL值http://decipherinfosys.wordpress.com/2007/11/30/multiple-null-values-in-a-unique-index-in-sql-serverdb2-luw/
基本上在文章中他们让他们保持唯一一个额外的列。如果您的原始列是而不是为空,则其内容将被复制到唯一列中。只要它为空,主键就被复制到列中。这是一个解决方法,但它应该工作。
在tehvan发布的链接中没有提到的一个解决方案是索引视图。 (创建一个视图,排除具有空列值的行并在视图上添加唯一索引)。
如果您不想将其他列添加到基表中,则可能首选此方法。两种方法都需要您启用正确的ANSI设置。