Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.04.25;
Скачать: CL | DM;

Вниз

Constraint и Exists   Найти похожие ветки 

 
Fishka   (2004-03-25 14:52) [0]

Мне нужно добавить ограничение на столбец таблицы (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..?


 
Ega23 ©   (2004-03-25 14:56) [1]

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


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

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


 
Ega23 ©   (2004-03-25 15:04) [3]

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

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

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


 
Johnmen ©   (2004-03-25 15:06) [4]

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


 
Ega23 ©   (2004-03-25 15:10) [5]

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


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

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

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

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


 
Johnmen ©   (2004-03-25 15:33) [7]

>Subqueries are not supported in CHECK constraints

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

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


 
Nikolay M. ©   (2004-03-25 15:37) [8]

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


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

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

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


 
Johnmen ©   (2004-03-25 15:52) [10]

>Fishka   (25.03.04 15:43) [9]

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



Страницы: 1 вся ветка

Текущий архив: 2004.04.25;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.053 c
11-1059306656
Кладов
2003-07-27 15:50
2004.04.25
глюк комбобокса?


14-1081176951
Digitman
2004-04-05 18:55
2004.04.25
Роль полит.лидеров в становлении/крахе отеч.комп.индустрии


1-1081159093
Checist [root]
2004-04-05 13:58
2004.04.25
Вытащить сылку из .lnk файла


1-1081387284
Broot
2004-04-08 05:21
2004.04.25
Что быстрее FillChar or ZeroMemory?


6-1076274112
ser_ega
2004-02-09 00:01
2004.04.25
Инет