Из контекста кажется, что вы пытаетесь ограничить вставку или обновление записи, которая содержит диапазон дат, который не относится к текущей дате. Для этого вы можете использовать триггер. Если диапазон дат не соответствует вашим критериям активности, вы можете вызвать ошибку и предотвратить вставку или обновление.
Я также только что попытался создать проверочное ограничение, и это также работает:
CREATE TABLE [dbo].[test]
(
[d1] [DATETIME] NULL,
[d2] [DATETIME] NULL
) ON [PRIMARY]
GO
ALTER TABLE [dbo].[test] WITH CHECK
ADD CONSTRAINT [CK_test] CHECK ((GETDATE() >= [d1] AND GETDATE() <= [d2]))
GO
ALTER TABLE [dbo].[test] CHECK CONSTRAINT [CK_test]
GO
Этот код:
INSERT INTO test SELECT '1/1/2000', '1/1/2001'
Выдает эту ошибку:
Сообщение 547, Уровень 16, Состояние 0, Строка 24
Оператор INSERT конфликтует сПРОВЕРЬТЕ ограничение "CK_test". Конфликт произошел в базе данных «SysproSupport», таблица «dbo.test». Утверждение было прекращено.
В конечном счете, похоже, что вы должны иметь возможность контролировать типы записей, которыми вы манипулируете с помощью своего внешнего интерфейса. Если у вас есть приложение или интерфейс ввода данных, который управляет вашими данными, вы можете наложить эти ограничения на него. Реализация этого в качестве ограничения или триггера гарантирует, что даже администратор не сможет очистить данные, не отключив их.