DB2的条件唯一约束

DB2的条件唯一约束,db2,Db2,很多人都知道,在DB2中,您可以说 ALTER TABLE EMPLOYEE ADD CONSTRAINT NEWID UNIQUE(EMPNO,HIREDATE) 你能说些类似的话吗 ALTER TABLE EMPLOYEE ADD CONSTRAINT NEWID UNIQUE(EMPNO,HIREDATE,ACTIVE = 'Y') 我只关心行处于活动状态时的约束。我看起来你可以在MSSQL中完成这项工作,但不能在DB2中完成。。。唉,发牢骚 与其他几个DBMS不同

很多人都知道,在DB2中,您可以说

   ALTER TABLE EMPLOYEE
  ADD CONSTRAINT NEWID UNIQUE(EMPNO,HIREDATE)
你能说些类似的话吗

   ALTER TABLE EMPLOYEE
  ADD CONSTRAINT NEWID UNIQUE(EMPNO,HIREDATE,ACTIVE = 'Y')

我只关心行处于活动状态时的约束。我看起来你可以在MSSQL中完成这项工作,但不能在DB2中完成。。。唉,发牢骚

与其他几个DBMS不同,DB2不支持部分索引


因此,我认为您无法在DB2中实现这一点。对于OP来说可能已经太晚了,但我遇到了类似的问题,并在这里找到了解决方案:

在列
empno
上创建唯一索引的代码如下所示:

CREATE UNIQUE INDEX my_index ON employee (CASE WHEN active = 'Y' THEN empno ELSE NULL END) EXCLUDE NULL KEYS;
相应地,对于
empno
hiredate
两列:

CREATE UNIQUE INDEX my_index ON employee (CASE WHEN active = 'Y' THEN empno ELSE NULL END, CASE WHEN active = 'Y' THEN hiredate ELSE NULL END) EXCLUDE NULL KEYS;

这取决于DB2的版本和/或“风格”。使用6.1及更高版本的DB2fori,您可以
创建唯一的索引x。。。其中搜索条件
,以便具有条件唯一性。