Главная страница
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.022 c
8-1077481762
VasRog
2004-02-22 23:29
2004.04.25
Dec и Scanline


7-1075292544
Deleter_low
2004-01-28 15:22
2004.04.25
Как удалить используемый файл?


1-1081126128
Сергей Петров
2004-04-05 04:48
2004.04.25
Вопросы про прозрачность


1-1081227057
[BAD]Angel
2004-04-06 08:50
2004.04.25
Как скопировать выделенный текст в буфер обмена?


3-1080631999
AOH
2004-03-30 11:33
2004.04.25
Транзакция в VBA MS ACCESS