Условное уникальное ограничение для DB2 - PullRequest
2 голосов
/ 28 декабря 2011

Итак, как многие из вас знают, в DB2 вы можете сказать

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

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

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

Меня интересует ограничение, только если строка активна. Похоже, что вы можете сделать это в MSSQL, но не в DB2 ...

Ответы [ 2 ]

1 голос
/ 18 декабря 2015

Возможно, уже слишком поздно для OP, но у меня была похожая проблема, и я нашел решение здесь: Эмуляция частичных индексов в 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;
0 голосов
/ 28 декабря 2011

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

Поэтому я не думаю, что вы сможете реализовать это в DB2

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...