Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 使列唯一但有一个例外_Sql_Sql Server_Tsql - Fatal编程技术网

Sql 使列唯一但有一个例外

Sql 使列唯一但有一个例外,sql,sql-server,tsql,Sql,Sql Server,Tsql,我们有一个应用程序,其工作流程包括向外部组提交信息,然后将用户的id号输入系统 出于这个原因,我们允许在批准条目和输入永久值之前,将设置的默认值“00000000”作为暂定值输入id字段 我要寻找的基本上是一种方法,以确保列除了一个值之外保持唯一 我基本上寻找的是唯一的约束,但是代替 null 是空白选项,它是代码>“00000000”< /代码>。我曾考虑将其作为检查约束的一部分,但这似乎会对性能造成很大影响。(假设UNIQUE进行某种索引)使用过滤索引 详情如下:- CREATE UNIQU

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

出于这个原因,我们允许在批准条目和输入永久值之前,将设置的默认值
“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和标志。

允许空值并将空值视为不完整、使用检查约束或替代插入触发器(我讨厌触发器)请参阅筛选索引:允许空值并将空值视为不完整、使用检查约束或替代插入触发器(我讨厌触发器)请参阅筛选索引: