use*_*916 3 null sql-server constraint
我有两个日期列:“开始日期”和“完成日期”。
我想确保对于一个主键(在我的情况下是复合键),“完成日期”列中只能有一个空值(如果它是 NULL,则应该是当前状态)。有没有办法做到这一点?
为了说明这一点,主键的一部分应该只有一个 NULL。以下是列:
PeriodID | PersonID | StartDate | FinishDate
1 1 1/1/10 10/1/10
2 1 10/1/10 NULL
3 1 somedate MUST NOT BE NULL
Run Code Online (Sandbox Code Playgroud)
是的,“PersonID”是外键。
我正在使用 SQL Server 2008。
编辑 :
我得到了一个有效的答案,但其他方式也很好。
如果我正确理解您的问题,SQLServer 的部分索引可以完成这项工作:
-- only 1 FinishDate nullable
CREATE UNIQUE INDEX IDXU_TAB1_1NULL ON TableName(FinishDate) WHERE FinishDate IS NULL;
-- or only 1 FinishDate is nullable for the same PersonId
CREATE UNIQUE INDEX IDXU_TAB2_1NULL ON TableName(PersonId, FinishDate)
WHERE FinishDate IS NULL;
Run Code Online (Sandbox Code Playgroud)
只是重复已经说过的:
1. 作为 PK 一部分的任何列都不能为空
2. 正如 Chris Travers在他对另一个答案的评论中提到的那样,NULL
当涉及到唯一约束时,SQLServer以与其他 RMDS 不同的方式对待s
归档时间: |
|
查看次数: |
4589 次 |
最近记录: |