2010-02-17 4 views
3

У меня есть таблица с двумя связанными столбцами, обязательная логическая и необязательная дата. Может быть только дата, когда логическое значение FALSE. Поэтому у меня есть эта структура:Нарушение ограничений при обновлении

CREATE TABLE FOO (
    FOO_ID INT IDENTITY(1, 1) NOT NULL, 
    MY_DATE DATETIME, 
    MY_BOOLEAN BIT DEFAULT 0 NOT NULL, 

    CONSTRAINT FOO_PK PRIMARY KEY (FOO_ID) 
); 

И я написал это ограничение, чтобы сохранить целостность данных:

ALTER TABLE FOO 
ADD CONSTRAINT FOO_CHK CHECK (
    MY_BOOLEAN=0 OR MY_DATE IS NULL 
); 

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

UPDATE FOO 
SET 
    MY_BOOLEAN=1, 
    MY_DATE=NULL 
WHERE FOO_ID=31416 

У меня возникла ошибка с ограничением проверки и обновление не удалось. Что я делаю не так?


UPDATE

Я с сожалением сообщаю, что я набранный имя столбца ... Извините за тратить свое время. Я хотел бы снять вопрос:. _ (

+0

Ошибка должна указывать **, что ** ограничение не работает, говорит ли это, что причиной является 'FOO_CHK'? –

+0

Инструкции ОБНОВЛЕНИЯ КОНТРОЛЯ КОНФЕРЕНЦИИ КОНФЕРЕНЦИИ КОНФИДЕНЦИАЛЬНОСТИ ПРОВЕРКИ« FOO_CHK ». ha aparecido en la base de datos «MY_DATABASE», tabla «dbo.FOO». –

ответ

0

К сожалению, фиктивный вопрос (самообеспечение ответ, кажется? быть единственным способом его закрыть).

2

Я проверил это с помощью этого сценария и не получаю ошибки Есть ли другие ограничения

CREATE TABLE FOO (
    FOO_ID INT IDENTITY(1, 1) NOT NULL, 
    MY_DATE DATETIME, 
    MY_BOOLEAN BIT DEFAULT 0 NOT NULL, 

    CONSTRAINT FOO_PK PRIMARY KEY (FOO_ID) 
); 
ALTER TABLE FOO 
ADD CONSTRAINT FOO_CHK CHECK (
    MY_BOOLEAN=0 OR MY_DATE IS NULL 
); 

set identity_insert foo on 
insert into foo(FOO_ID, my_date, MY_BOOLEAN) 
select 31416, '20090101', 0 
set identity_insert foo off 

UPDATE FOO 
SET 
    MY_BOOLEAN=1, 
    MY_DATE=NULL 
WHERE FOO_ID=31416 
+0

+1 и проверить работу CHECK: 'UPDATE FOO SET MY_BOOLEAN = 1, MY_DATE = getdate() WHER E FOO_ID = 31416' –

+0

Вы правы, он отлично работает только с этими двумя столбцами ... Есть некоторые другие ограничения, но ни один из них не влияет ни на логическую, ни на дату, а сообщение об ошибке очень ясно: оно обвиняет это конкретное ограничение: -? –

+0

Просьба представить весь скрипт создания таблицы со всеми ограничениями (проверки) – edosoft

Смежные вопросы