使列具有唯一性,但有一个例外

adc*_*c90 1 sql t-sql sql-server

我们有一个应用程序,其工作流程涉及向外部组提交信息,然后将用户的ID号输入系统.

出于这个原因,我们允许"00000000"在条目被批准之前将设置的默认值作为暂定值放入id字段中,并且输入永久值.

我正在寻找的本质上是一种确保列保持unique 除了那一个值的方法.

我基本上寻找的是一个UNIQUE约束,但它不是NULL它的空白选项"00000000".我已经考虑过将其作为CHECK约束的一部分,但这似乎是一个很大的性能影响.(假设UNIQUE进行某种索引)

ahm*_*der 10

使用过滤索引

如下: -

CREATE UNIQUE NONCLUSTERED INDEX idx_yourcolumn_notspecificvalue
ON YourTable(yourcolumn)
WHERE yourcolumn != "00000000";
Run Code Online (Sandbox Code Playgroud)

例:

-- Create Table
Create table Test (id int identity, code varchar (100))

-- Create Unique Filtered  Index
CREATE UNIQUE NONCLUSTERED INDEX idx_MyCol_Filtered 
ON Test(code)
WHERE code != '00000000';

-- Insert Dumy Data >> '00000000' is repeated and '0101' is once
insert into Test (code) 
Values  ('00000000'),
        ('00000000'),
        ('00000000'),
        ('0101')


select * from Test
Run Code Online (Sandbox Code Playgroud)

结果:

在此输入图像描述

-- Now try inserting '0101' again
insert into Test (code) Values ('0101')
Run Code Online (Sandbox Code Playgroud)

结果:

在此输入图像描述


有关更多详细信息: 创建过滤的索引