Нарушение ограничения при обновлении - PullRequest
3 голосов
/ 17 февраля 2010

У меня есть таблица с двумя связанными столбцами, обязательным логическим значением и необязательной датой. Может быть только дата, когда логическое значение - ЛОЖЬ. Итак, у меня есть эта структура:

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

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

Ответы [ 2 ]

2 голосов
/ 17 февраля 2010

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

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 голосов
/ 22 февраля 2010

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

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