2016-12-19 8 views
0

Я добавляю столбец в таблицу и хочу установить ограничение на него, что он не может быть обновлен до указанной даты, сохраненный в той же строке таблицы ,Как добавить ограничение проверки на столбец для обновления

Это то, что я получил до сих пор:

ALTER TABLE sometable 
    ADD somecolumn BIT NOT NULL DEFAULT 0; 

ALTER TABLE sometable 
    ADD CONSTRAINT somedate_before_now 
     CHECK (somedatecolumn < GETDATE()); 

Как получить эту работу, для обновлений только somecolumn? Вставки и обновления других столбцов должны быть разрешены.

Я тестирую это в базе данных H2 в памяти, но ему также придется работать с SQL Server.

ответ

1

Я думаю, что безопасный способ сделать это - использовать триггер.

Ограничение таких, как это:

CHECK (somedatecolumn < GETDATE()) 

не имеет смысла с реляционной точки зрения. Он может гарантировать, что значения действительны на update или insert. Однако база данных не может гарантировать, что значения в целом верны. Вы должны использовать ограничения CHECK для вещей, которые вы всегда хотите быть истинными в строке.

(Проблема заключается в том, что GETDATE() изменения без каких-либо изменений на строке.)

+0

Я согласен. не только это, но OP хочет, чтобы это работало только для обновлений, поэтому ограничение проверки не может быть правильным. вместо триггера обновления я бы выбрал. –

+0

Спасибо. Честно говоря, я мало знаю о триггерах, поэтому я действительно не могу сказать, будет ли это работать для проверки моей колонки, но я вижу вашу точку в GETDATE(). Я добавил подтверждение на мои услуги. –