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)
结果:
有关更多详细信息: 创建过滤的索引