Я пытаюсь обеспечить целостность таблицы способом, который, я думаю, не может ограничить ...
CREATE TABLE myData
(
id INTEGER IDENTITY(1,1) NOT NULL,
fk_item_id INTEGER NOT NULL,
valid_from DATETIME NOT NULL,
invlaid_from DATETIME NOT NULL
)
Ограничение, которое я хочу применить, состоит в том, что никогда не должно быть записей для того же самого "fk_item_id" с перекрывающимися датами.
Примечание:
invalid_from - момент, следующий сразу же после действительного периода.
Это означает, что следующие два периода хороши ...
- '2008 Jan 01 00:00' -> '2008 Feb 01 00:00' (все января)
- '2008 Feb 01 00:00' -> '2008 Mar 01 00:00' (весь февраль)
Я могу проверить это правило в триггере. Однако когда триггер обнаруживает недопустимую вставку / обновление, каков наилучший способ предотвратить возникновение «незаконных» вставок / обновлений?
(Если вставлено включает две действительные записи и две недействительные записи, могу ли я остановить только две недействительные записи?)
Приветствия
Демс.
EDIT:
В моем случае ограничение с использованием функции работало хорошо. Но я так и не понял, почему RAISERROR не работает в триггерной версии.
Я думал, что это потому, что триггер - это ПОСЛЕ триггера, и что мне нужен триггер ДО, но это не вариант ...