Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Зависимость одного поля от другого  [new]
vso
Member

Откуда: СПб
Сообщений: 270
Добрый день!

Подскажите, пожалуйста, можно ли в Check проверять условие, что если поле Field1 пуст, то в поле Field2 можно записать значение и наоборот если Field2 пусто, то в поле Field1 можно записать значение?
4 сен 14, 21:43    [16537290]     Ответить | Цитировать Сообщить модератору
 Re: Зависимость одного поля от другого  [new]
o-o
Guest
в смысле, чтоб не было так, что оба одновременно NOT NULL?
create table dbo.t (c1 int null, c2 int null);

alter table dbo.t
add constraint chk_c1c2
check ((case when c1 is null then 0 else 1 end
      + case when c2 is null then 0 else 1 end) <= 1);

insert into dbo.t (c1) values (1); -- ok
insert into dbo.t (c2) values (2); -- ok
insert into dbo.t (c1, c2) values (1, 2); -- The INSERT statement conflicted with the CHECK constraint "chk_c1c2"...
insert into dbo.t (c1, c2) values (null, null); -- ok
4 сен 14, 22:42    [16537456]     Ответить | Цитировать Сообщить модератору
 Re: Зависимость одного поля от другого  [new]
invm
Member

Откуда: Москва
Сообщений: 9404
check (Field1 is null or Field2 is null)
4 сен 14, 22:58    [16537518]     Ответить | Цитировать Сообщить модератору
 Re: Зависимость одного поля от другого  [new]
vso
Member

Откуда: СПб
Сообщений: 270
o-o,

Да именно так
4 сен 14, 23:33    [16537645]     Ответить | Цитировать Сообщить модератору
 Re: Зависимость одного поля от другого  [new]
vso
Member

Откуда: СПб
Сообщений: 270
но при этом чтобы одновременно оба не могли быть null
4 сен 14, 23:34    [16537648]     Ответить | Цитировать Сообщить модератору
 Re: Зависимость одного поля от другого  [new]
Mind
Member

Откуда: Лучший город на Земле
Сообщений: 2322
create table dbo.t (c1 int null, c2 int null);

alter table dbo.t
add constraint chk_c1c2
check (CASE WHEN c1 IS NULL THEN 1 ELSE 0 END 
     ^ CASE WHEN c2 IS NULL THEN 1 ELSE 0 END = 1);
5 сен 14, 04:11    [16537915]     Ответить | Цитировать Сообщить модератору
 Re: Зависимость одного поля от другого  [new]
o-o
Guest
Веткин Сергей
но при этом чтобы одновременно оба не могли быть null

alter table dbo.t
add constraint chk_c1c2
check ((case when c1 is null then 0 else 1 end
      + case when c2 is null then 0 else 1 end) = 1);
5 сен 14, 10:57    [16538664]     Ответить | Цитировать Сообщить модератору
 Re: Зависимость одного поля от другого  [new]
iap
Member

Откуда: Москва
Сообщений: 47000
invm
check (Field1 is null or Field2 is null)
CHECK(Field1 IS NULL AND Field2 IS NOT NULL OR Field1 IS NOT NULL AND Field2 IS NULL)
Так надо?
Зачем предлагается CASE - не понял.
5 сен 14, 12:37    [16539529]     Ответить | Цитировать Сообщить модератору
 Re: Зависимость одного поля от другого  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 7868
Если автор желает сделать ограничение для пользователя приложения, то check - не лучший выбор, т.к. дает неконтролируемую, в определённом смысле, ошибку. Для пользователей проверку необходимо выполнять в процедуре.
5 сен 14, 12:55    [16539682]     Ответить | Цитировать Сообщить модератору
 Re: Зависимость одного поля от другого  [new]
o-o
Guest
iap
Зачем предлагается CASE - не понял.

чтоб жизнь малиной не казалась

на самом деле, у CASE-а расширяемость лучше.
в смысле, если надо будет имитировать "radio button" для 10 полей,
каждый NULL перевели в 0 и хотим, чтоб сумма была 1.
а расписывать кучу OR и AND - лениво :)
5 сен 14, 12:55    [16539688]     Ответить | Цитировать Сообщить модератору
 Re: Зависимость одного поля от другого  [new]
vso
Member

Откуда: СПб
Сообщений: 270
Всем спасибо.
7 сен 14, 18:03    [16546411]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить