![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
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?
Чисто из любопытства: а модель можно описать, если не секрет?