sql-server – 实现在SQL Server中允许多个NULL值的唯一约束的正确方法
发布时间:2020-05-25 03:25:59 所属栏目:MsSql 来源:互联网
导读:我需要表中的1列来保存唯一的非空值或NULL. TSQL UNIQUE约束将2个NULL视为相等,所以我不能使列唯一. 处理这个问题的正确方法是什么? 在做了一些研究之后,我发现了两种对我来说似乎是正确的方法,但是我不能确定哪一种更好. 第一个不适用于所有情况: CREATE T
|
我需要表中的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)< - 根据您的标签推荐>触发器(提到)>索引视图(在你的问题)>具有计算列的唯一约束/索引(在您的问题中) (编辑:安卓应用网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- MySQL查询优化:连接查询排序limit(join、order by、limit语
- 防止SQL Server的事件探查器跟踪软件
- sql-server – 将数据库图添加到源代码管理?
- sql – 数据库表名称:多个或单数[已关闭]
- 用于组中任何非特定值的SQL聚合函数
- sql-server – 在SQL Server中搜索存储为XML的数据的最佳方
- MYSQL METADATA LOCK(MDL LOCK)MDL锁问题分析
- sql-server-2008 – 流畅的NHibernate SQL Server 2008 DAT
- mysql中合并两个字段的方法分享
- sql – 在MS Access Query中将字符串转换为日期
