sql-server – 实现在SQL Server中允许多个NULL值的唯一约束的正确方法

前端之家收集整理的这篇文章主要介绍了sql-server – 实现在SQL Server中允许多个NULL值的唯一约束的正确方法前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我需要表中的1列来保存唯一的非空值或NULL. Tsql UNIQUE约束将2个NULL视为相等,所以我不能使列唯一.
处理这个问题的正确方法是什么?
在做了一些研究之后,我发现了两种对我来说似乎是正确的方法,但是我不能确定哪一种更好.
第一个不适用于所有情况:
CREATE TABLE test (id INT NOT NULL IDENTITY(1,1) PRIMARY KEY,null_or_unique_id INT,unique_key AS  
(CASE WHEN [null_or_unique_id] IS NULL THEN -(1)*[id] 
 ELSE [null_or_unique_id] END),UNIQUE(unique_key ));

它工作,但要求所有允许的值null_or_unique_id为非负数(在我的情况下可以)
第二个 :

CREATE VIEW test_view WITH SCHEMABINDING AS
 SELECT [null_or_unique_id] FROM dbo.test WHERE [null_or_unique_id] IS NOT NULL;
 GO
 CREATE UNIQUE CLUSTERED INDEX byNullOrUniqueId 
 ON dbo.test_view([null_or_unique_id]);

当然,也可以使用触发器实现所需的功能,但是我认为触发器解决方案会创建更多的开销,然后是上面提到的任何一个.

这种情况的最佳做法是什么?
感谢您的答案.

解决方法

4种方法

> Filtered index(sql Server 2008)< - 根据您的标签推荐>触发器(提到)>索引视图(在你的问题)>具有计算列的唯一约束/索引(在您的问题中)

猜你在找的MsSQL相关文章