Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Constraint и Exists [MSSQL]


Fishka ©   (2004-03-25 14:52:00) 

Мне нужно добавить ограничение на столбец таблицы (recept.id_oprod), значения в котором могут быть такими же, как в другой таблице (or_prod.id_oprod), для которых есть еще дополнительное условие (or_prod.sign_oprod=1). Пишу что-то вроде этого:
ALTER TABLE recept
ADD CONSTRAINT CK_recept
exists (select id_oprod from or_prod
where recept.id_oprod=or_prod.id_oprod
and or_prod.sign_oprod=1)

Выдается ошибка: Incorrect syntax near the keyword 'exists'
Где моя ошибка?
Разве нельзя писать Constraint с условием   exists select..?


Johnmen   (2004-03-25 15:52:00) [1]

>Fishka   (25.03.04 15:43) [9]

Могу от себя сказать, что если вдруг появляется такая необходимость, то она решается через триггеры (Nikolay M. ©   (25.03.04 15:37) [8]). Что в большинстве случаев к тому же и работает гибче и быстрее...


Fishka   (2004-03-25 15:43:00) [2]

Johnmen ©   (25.03.04 15:33) [7]
У меня такая мысль была (что такое ограничение не поддерживается в MSSSQL). Но так хотелось верить, что я ошибаюсь, и MSSSQL круче, чем IB........... Увы........

Но может, все-таки можно обойтись Constraint-ом?


Nikolay M.   (2004-03-25 15:37:00) [3]

Почему бы просто тригером не сделать?


Johnmen   (2004-03-25 15:33:00) [4]

>Subqueries are not supported in CHECK constraints

Этим всё сказано.

Вот в IB/FB/YA это дело supported :)


Fishka   (2004-03-25 15:16:00) [5]

Модель базы спроектирована верно. Есть таблицы, у которых foreign key на таблицу or_prod. Но данная таблица имеет тоже как бы foreign key, но не на все значения, а только на те, у которых or_prod.sign_oprod=1.  

А вторичный ключ такого типа был уже мною когда-то написан, но  база была InterBase.
И со словом CHECK попытки были. Ошибка такая:
Subqueries are not supported in CHECK constraints

И все же надеюсь на помощь....


Ega23   (2004-03-25 15:10:00) [6]

Блин, точно. А я про CHECK как-то и забыл  :-((


Johnmen   (2004-03-25 15:06:00) [7]

Ошибка в синтаксисе. Не указан тип констрейнта. В данном случае  CHECK.


Ega23   (2004-03-25 15:04:00) [8]

Что касается описания, то возможны не все коды продукции в данномй таблице, а только те, которые имеют значение or_prod.sign_oprod=1  .

Это как раз понятно. Просто может у тебя модель базы спроектирована неверно.

А вообще можно так: вторичный ключ + триггер на insert. А в триггере проверять, чему равно or_prod.sign_oprod


Fishka   (2004-03-25 14:59:00) [9]

В данном случае из-за дополнительного условия or_prod.sign_oprod=1 foreign key не подходит.
Что касается описания, то возможны не все коды продукции в данномй таблице, а только те, которые имеют значение or_prod.sign_oprod=1 .
Жду ответа


Ega23   (2004-03-25 14:56:00) [10]

Вообще-то первое, что приходит в голову - почему бы foreign key не использовать? Но причём здесь тогда or_prod.sign_oprod=1?
Чисто из любопытства: а модель можно описать, если не секрет?


Наверх

Титульная страница Поиск, карта сайта Написать письмо