sql server表的部分值约束 [英] Partial value constraint of sql server table

查看:151
本文介绍了sql server表的部分值约束的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个SQL Server表有两列id:INT和标记:BOOLEAN。是否可以添加一个约束,确保对于(id = a,flagged = b)只有一个条目,其中b = 1?



p>

ok

(id = 1,flagged = 1)
(id = 1,flagged = 0)
(id = 1,flagged = 0)

不确定

= 1)
(id = 1,flagged = 1)
(id = 1,flagged = 0)

解决方案

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

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

演示:



a href =http://sqlfiddle.com/#!6/6e897c/1/0 =nofollow> SqlFiddleDemo

  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) - 将失败
VALUES(1,1);

/ *无法在对象'dbo.your_table'中插入重复的键行
使用唯一索引'idx_name'。重复键值为(1)。* /


I have a SQL Server table with two columns id:INT and flagged:BOOLEAN. Is it possible to add a constraint that ensures that there is only one entry for (id=a, flagged=b) where b = 1?

For example:

ok (id=1, flagged=1) (id=1, flagged=0) (id=1, flagged=0) not ok (id=1, flagged=1) (id=1, flagged=1) (id=1, flagged=0)

解决方案

Create Unique Index with filter:

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

Demo:

SqlFiddleDemo

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).*/

这篇关于sql server表的部分值约束的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆