2011-12-28 3 views
1

Так как многие из вас знают, в DB2 вы можете сказатьУсловный уникальное ограничение для DB2

ALTER TABLE EMPLOYEE 
    ADD CONSTRAINT NEWID UNIQUE(EMPNO,HIREDATE) 

Можете ли вы сказать что-то вроде

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

Я только заботиться о ограничении, если строка активный. Похоже, вы можете сделать это в MSSQL, но не в DB2 ... Err, ворчит ворчать.

+0

Это зависит от выпуска и/или «вкуса» DB2. С DB2 for i в 6.1 и более поздних версиях вы можете «СОЗДАТЬ УНИКАЛЬНЫЙ ИНДЕКС x ... WHERE search-condition», чтобы иметь условную уникальность. – user2338816

ответ

0

В отличие от нескольких других СУБД, DB2 не поддерживает частичные индексы.

Так что я не думаю, что вы будете в состоянии осуществить это в DB2

0

Это, вероятно, слишком поздно для OP, но у меня была аналогичная проблема, и нашел решение здесь: Emulating partial indexes in DB2

Код для создания уникального индекса столбца 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; 
Смежные вопросы