Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2005.11.06;
Скачать: [xml.tar.bz2];

Вниз

Хранимая процедура   Найти похожие ветки 

 
Константин2   (2005-09-21 21:46) [0]

Кто может помогите найти решение на следующий вопрос.

Есть база данных склада для бара MSSQL. В ней три таблицы: ассортимент товара,
калькуляционная карта и, собственно сам склад. При продаже определённого блюда, происходит списание
продуктов со склада в соответствии с калькуляционной картой. (в ней указанно сколько и какого продукта содержится
в данном блюде). Списание происходит по правилу первый пришел-первый ушёл, т.е. чем не свежее товар, тем скорее он
должен быть использован.Если какогото инградиента нет или недостаточно для блюда списание не происходит для всех инградиентов блюда. Списанием занимается хранимая процедура, принимающая id блюда из
калькуляционной карты.

Вопрос: как построить SQL запрос. Вариант типа
SELECT * FROM sklad WHERE prod in (SELECT * FROM ingrad where menu=@id)
почемуто не проходит, выдается ошибка.


 
Desdechado ©   (2005-09-21 22:39) [1]

а что, в таблице INGRAD только однополе, что ты выбираешь все и проверяешь вхождение продукта в нее?


 
Константин2   (2005-09-22 09:20) [2]

Нет в, таблице инград не одно поле. Нужное только одно - ключ связывающий таблицу menu и ingrad. Выборка потом происходит со склада.
Запрос правильный, но в хранимой процедуре не работает. Может использовать Batch


 
evvcom ©   (2005-09-22 09:29) [3]


> Нет в, таблице инград не одно поле.

Ну так и пиши тогда
SELECT * FROM sklad WHERE prod in (SELECT prod FROM ingrad where menu=@id)
Надесь, Foreign Key"s настроены?


 
KSergey ©   (2005-09-22 09:57) [4]

> Константин2   (22.09.05 09:20) [2]
> Запрос правильный, но в хранимой процедуре не работает.

Такого не может быть.
Либо он правильный и работает, либо он не правильный и не работает.

А по поводу решения - было бы интересно глянуть как у вас происходит реализация фразы "Если какогото инградиента нет или недостаточно для блюда списание не происходит для всех инградиентов блюда".
Чего-то приведенный запрос подсказывает мне, что очень нездорово это реализовано...
К стати, а может это и вовсе в триггера запихнуть? Т.е. завести таблицу продаж и при продаже (при добавлении в нее записи) триггерами удалять данные из соотв. таблиц.
И учет продаж получаем, и все работает само собою...


 
Константин2   (2005-09-22 20:56) [5]

Да действительно моя ошибка. В подзапросе должно быть одно поле причём такое же как и во внешнем запросе. Люди подскажите как лучше сохранить результат запроса для дальнейшей обработки. Т.е. если по какойто позиции товара на складе нет или не достаточно то rollback transaction.



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

Форум: "Базы";
Текущий архив: 2005.11.06;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.45 MB
Время: 0.126 c
2-1129007753
Dimon777
2005-10-11 09:15
2005.11.06
Контекстная справка F1


1-1129694438
Квэнди
2005-10-19 08:00
2005.11.06
Сортировка StringGrid


2-1129050240
Fasd
2005-10-11 21:04
2005.11.06
Как проверить наличие записи с помощью SQL-запроса?


14-1129120340
MacroDenS
2005-10-12 16:32
2005.11.06
Стабилизированные 12 вольт


14-1129553300
ZeroDivide
2005-10-17 16:48
2005.11.06
Вопрос по оптимальному выбору видеокарты для старого железа.





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский