Partial value constraint of sql server table

£可爱£侵袭症+ 提交于 2019-12-12 05:58:19

问题


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)


回答1:


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


来源:https://stackoverflow.com/questions/32473877/partial-value-constraint-of-sql-server-table

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!