Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 IF в CONSTRAINT  [new]
ламер ушастый
Guest
CREATE TABLE table1
(
field1 int,
field2 int
)

Условие такое - если в field2 значение "2", то в field1 тоже должно быть "2". Как написать CONSTRAINT, отсекающий другие варианты при INSERT и UPDATE? Что-то не соображу.
11 дек 09, 00:06    [8049882]     Ответить | Цитировать Сообщить модератору
 Re: IF в CONSTRAINT  [new]
Knyazev Alexey
Member

Откуда: Екб -> Мск
Сообщений: 10234
Блог
сделать field1 - вычисляемым
11 дек 09, 06:39    [8050212]     Ответить | Цитировать Сообщить модератору
 Re: IF в CONSTRAINT  [new]
ламер ушастый
Guest
Нет, так не получится. Дело в том, что в field1 тоже вводятся данные из определенного диапазона значений, но если в field2 - двойка, то в field1 - тоже.
Пока проверяю условие на клиенте, и в хранимых процедурах на запись и обновление, но как-то это неправильно, такое ощущение, что потенциальная дырка в непротиворечивости данных образовалась. Вот если бы констрейнтом.
Или, может, триггер прикрутить?
11 дек 09, 08:00    [8050295]     Ответить | Цитировать Сообщить модератору
 Re: IF в CONSTRAINT  [new]
daw
Member

Откуда: Муром -> Москва
Сообщений: 7381

?
CREATE TABLE table1
(
field1 int,
field2 int,
check(isnull(field2, 0) = case when field1 = 2 then 2 end)
)

Posted via ActualForum NNTP Server 1.4

11 дек 09, 08:14    [8050321]     Ответить | Цитировать Сообщить модератору
 Re: IF в CONSTRAINT  [new]
daw
Member

Откуда: Муром -> Москва
Сообщений: 7381

упс, наоборот, то есть:
check(isnull(field1, 0) = case when field2 = 2 then 2 end)

Posted via ActualForum NNTP Server 1.4

11 дек 09, 08:17    [8050326]     Ответить | Цитировать Сообщить модератору
 Re: IF в CONSTRAINT  [new]
ламер ушастый
Guest
О, это уже интересно, попробую разобраться.
Нуллы в полях тоже не допкскаются, нужно реализовать условие
IF field2 = 2 THEN field1 = 2
При любых других значених, записываемых в field2, значения в field1 не ограничиваются
11 дек 09, 08:40    [8050389]     Ответить | Цитировать Сообщить модератору
 Re: IF в CONSTRAINT  [new]
aleks2
Guest
ламер ушастый
О, это уже интересно, попробую разобраться.
Нуллы в полях тоже не допкскаются, нужно реализовать условие
IF field2 = 2 THEN field1 = 2
При любых других значених, записываемых в field2, значения в field1 не ограничиваются


check ((field2=2) and (field1=2)) OR (field2<>2)

Зачем тута IF?
11 дек 09, 08:51    [8050416]     Ответить | Цитировать Сообщить модератору
 Re: IF в CONSTRAINT  [new]
ламер ушастый
Guest
aleks2
Зачем тута IF?
Не знаю, я же ламер ушастый :)
Спасибо.
11 дек 09, 08:53    [8050425]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить