Sql 使列唯一但有一个例外
我们有一个应用程序,其工作流程包括向外部组提交信息,然后将用户的id号输入系统 出于这个原因,我们允许在批准条目和输入永久值之前,将设置的默认值Sql 使列唯一但有一个例外,sql,sql-server,tsql,Sql,Sql Server,Tsql,我们有一个应用程序,其工作流程包括向外部组提交信息,然后将用户的id号输入系统 出于这个原因,我们允许在批准条目和输入永久值之前,将设置的默认值“00000000”作为暂定值输入id字段 我要寻找的基本上是一种方法,以确保列除了一个值之外保持唯一 我基本上寻找的是唯一的约束,但是代替 null 是空白选项,它是代码>“00000000”< /代码>。我曾考虑将其作为检查约束的一部分,但这似乎会对性能造成很大影响。(假设UNIQUE进行某种索引)使用过滤索引 详情如下:- CREATE UNIQU
“00000000”
作为暂定值输入id字段
我要寻找的基本上是一种方法,以确保列除了一个值之外保持唯一
我基本上寻找的是<代码>唯一的<代码>约束,但是代替<代码> null <代码>是空白选项,它是代码>“00000000”< /代码>。我曾考虑将其作为
检查约束的一部分,但这似乎会对性能造成很大影响。(假设UNIQUE进行某种索引)使用过滤索引
详情如下:-
CREATE UNIQUE NONCLUSTERED INDEX idx_yourcolumn_notspecificvalue
ON YourTable(yourcolumn)
WHERE yourcolumn != "00000000";
示例:
-- 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
结果:
-- 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
结果:
-- 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
有关详细信息:
使用过滤索引
详情如下:-
CREATE UNIQUE NONCLUSTERED INDEX idx_yourcolumn_notspecificvalue
ON YourTable(yourcolumn)
WHERE yourcolumn != "00000000";
示例:
-- 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
结果:
-- 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
结果:
-- 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
有关详细信息:
通过工作流程批准用户条目听起来像是非常关键的业务逻辑。我想建议生成随机但唯一(如时间戳)的数字,并插入新的用户条目。保留用于区分(标记)已批准分录和未批准分录的附加列。一旦用户从工作流获得批准,更新id和标志。通过工作流批准用户条目听起来像是非常关键的业务逻辑。我想建议生成随机但唯一(如时间戳)的数字,并插入新的用户条目。保留用于区分(标记)已批准分录和未批准分录的附加列。一旦用户从工作流获得批准,更新id和标志。允许空值并将空值视为不完整、使用检查约束或替代插入触发器(我讨厌触发器)请参阅筛选索引:允许空值并将空值视为不完整、使用检查约束或替代插入触发器(我讨厌触发器)请参阅筛选索引: