Sql server sql server表的部分值约束

Sql server sql server表的部分值约束,sql-server,constraints,Sql Server,Constraints,我有一个SQL Server表,有两列id:INT和标记为:BOOLEAN。是否可以添加一个约束,以确保在b=1的情况下(id=a,flagged=b)只有一个条目 例如: 嗯 (id=1,标记=1) (id=1,标记为0) (id=1,标记为0) 不好 (id=1,标记=1) (id=1,标记=1) (id=1,标记为0) 使用过滤器创建唯一索引: CREATE UNIQUE INDEX idx_name ON your_table(id) WHERE flagged=1; 演示

我有一个SQL Server表,有两列id:INT和标记为:BOOLEAN。是否可以添加一个约束,以确保在b=1的情况下(id=a,flagged=b)只有一个条目

例如:


(id=1,标记=1)
(id=1,标记为0)
(id=1,标记为0)
不好

(id=1,标记=1)
(id=1,标记=1)
(id=1,标记为0)

使用过滤器创建唯一索引:

CREATE UNIQUE INDEX idx_name ON your_table(id)
   WHERE flagged=1;
演示:

CREATE TABLE your_table(id INT, flagged INT);

CREATE UNIQUE INDEX idx_name ON your_table(id)
   WHERE flagged=1;


INSERT INTO your_table(id, flagged)
VALUES (1, 0), (1,1), (1,0);

INSERT INTO your_table(id, flagged)   -- will fail
VALUES (1,1);

/* Cannot insert duplicate key row in object 'dbo.your_table'
   with unique index 'idx_name'. The duplicate key value is (1).*/

使用筛选器创建唯一索引:

CREATE UNIQUE INDEX idx_name ON your_table(id)
   WHERE flagged=1;
演示:

CREATE TABLE your_table(id INT, flagged INT);

CREATE UNIQUE INDEX idx_name ON your_table(id)
   WHERE flagged=1;


INSERT INTO your_table(id, flagged)
VALUES (1, 0), (1,1), (1,0);

INSERT INTO your_table(id, flagged)   -- will fail
VALUES (1,1);

/* Cannot insert duplicate key row in object 'dbo.your_table'
   with unique index 'idx_name'. The duplicate key value is (1).*/

使用筛选器创建唯一索引:

CREATE UNIQUE INDEX idx_name ON your_table(id)
   WHERE flagged=1;
演示:

CREATE TABLE your_table(id INT, flagged INT);

CREATE UNIQUE INDEX idx_name ON your_table(id)
   WHERE flagged=1;


INSERT INTO your_table(id, flagged)
VALUES (1, 0), (1,1), (1,0);

INSERT INTO your_table(id, flagged)   -- will fail
VALUES (1,1);

/* Cannot insert duplicate key row in object 'dbo.your_table'
   with unique index 'idx_name'. The duplicate key value is (1).*/

使用筛选器创建唯一索引:

CREATE UNIQUE INDEX idx_name ON your_table(id)
   WHERE flagged=1;
演示:

CREATE TABLE your_table(id INT, flagged INT);

CREATE UNIQUE INDEX idx_name ON your_table(id)
   WHERE flagged=1;


INSERT INTO your_table(id, flagged)
VALUES (1, 0), (1,1), (1,0);

INSERT INTO your_table(id, flagged)   -- will fail
VALUES (1,1);

/* Cannot insert duplicate key row in object 'dbo.your_table'
   with unique index 'idx_name'. The duplicate key value is (1).*/

如果您在此处(或整个web)搜索
条件唯一约束
,您应该会找到大量结果。通常,筛选索引或索引视图(对于早期版本)都符合要求。@Lloyd Unique filtered index正是以这种方式工作的。如果您在此处(或整个web)搜索
条件唯一约束
,您应该会找到大量结果。通常,筛选索引或索引视图(对于早期版本)都符合要求。@Lloyd Unique filtered index正是以这种方式工作的。如果您在此处(或整个web)搜索
条件唯一约束
,您应该会找到大量结果。通常,筛选索引或索引视图(对于早期版本)都符合要求。@Lloyd Unique filtered index正是以这种方式工作的。如果您在此处(或整个web)搜索
条件唯一约束
,您应该会找到大量结果。通常,筛选索引或索引视图(对于早期版本)都符合要求。@Lloyd Unique筛选索引正是以这种方式工作的,用于向下投票者在留言中留下不起作用的信息完美答案。我不知道为什么会有人想否决这项投票。感谢lad2025。对于支持率较低的选民,请在留言中留言“什么不起作用?”完美答案。我不知道为什么会有人想否决这项投票。感谢lad2025。对于支持率较低的选民,请在留言中留言“什么不起作用?”完美答案。我不知道为什么会有人想否决这项投票。感谢lad2025。对于支持率较低的选民,请在留言中留言“什么不起作用?”完美答案。我不知道为什么会有人想否决这项投票。谢谢你。