Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Нужна помощь с CHECK  [new]
mantap
Member

Откуда:
Сообщений: 72
Таблица "Склад" (SKLAD)

а)Продажа товара производится ТОЛЬКО со склада. С этой целью создается таблица SKLAD:

б)Количество определенного товара (книг) на складе не должно превышать соответствующего
тиража - с этой целью создается ограничение на столбец QUANTITY.

в) При поступлении товара на склад необходимо осуществить проверку на наличие этого
товара на складе - если такой товар уже есть, то необходимо просто увеличить количество
этого товара на складе (QUANTITY). Если такого товара нет - тогда производится добавление
новой записи в таблицу склад - ID_BOOK (идентификатор товара) и QUANTITY (кол-во товара).

С этой целью рекомендуется создать хранимую процедуру
-------------------------------------------------------------------------------------------------------------------------

Я хотел попробывать сделать таким образом:

CREATE TABLE Sklad
(
ID_Book int,
Quantity int,
CONSTRAINT C_Q CHECK(QUANTITY < (SELECT PressRun FROM Books
WHERE Sklad.ID_Book= Books.ID)),
FOREIGN KEY(ID_Book) REFERENCES Books
);

Но не получилось, СУБД выдала ошибку: Вложенные запросы в данном контексте не разрешены. Допускаются только скалярные выражения

Подскажите пожалуйста можно ли как-то использовать вложенныек запросы в CHECK, если нет, то каким способом можно ещё это реализовать.

Взаранее спасибо
13 мар 12, 22:50    [12243260]     Ответить | Цитировать Сообщить модератору
 Re: Нужна помощь с CHECK  [new]
Гавриленко Сергей Алексеевич
Member

Откуда:
Сообщений: 37254
Нельзя в чеке этого делать. Делайте триггер.
13 мар 12, 22:56    [12243289]     Ответить | Цитировать Сообщить модератору
 Re: Нужна помощь с CHECK  [new]
mantap
Member

Откуда:
Сообщений: 72
А в CHECK нельзя использовать функции??
13 мар 12, 22:57    [12243298]     Ответить | Цитировать Сообщить модератору
 Re: Нужна помощь с CHECK  [new]
Crimean
Member

Откуда:
Сообщений: 13147
mantap,

можно
13 мар 12, 23:33    [12243451]     Ответить | Цитировать Сообщить модератору
 Re: Нужна помощь с CHECK  [new]
mantap
Member

Откуда:
Сообщений: 72
Спасибо за советы

З.Ы. Если кто-то ещё чем-то может помочь, то жду помощи
14 мар 12, 01:13    [12243698]     Ответить | Цитировать Сообщить модератору
 Re: Нужна помощь с CHECK  [new]
Crimean
Member

Откуда:
Сообщений: 13147
беда в том что массовое обновление этого поля в случае реализации чека на UDF усадит сервер основательно
триггер будет более гуманным
14 мар 12, 01:17    [12243702]     Ответить | Цитировать Сообщить модератору
 Re: Нужна помощь с CHECK  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74930
автор
При поступлении товара на склад необходимо осуществить проверку на наличие этого
товара на складе - если такой товар уже есть, то необходимо просто увеличить количество
этого товара на складе (QUANTITY). Если такого товара нет - тогда производится добавление
новой записи в таблицу склад - ID_BOOK (идентификатор товара) и QUANTITY (кол-во товара).


Есть такая замечательная инструкция, как MERGE. Разберитесь с примерами ее использования.
14 мар 12, 09:54    [12244178]     Ответить | Цитировать Сообщить модератору
 Re: Нужна помощь с CHECK  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31990
mantap
З.Ы. Если кто-то ещё чем-то может помочь, то жду помощи
Лучьше всего использовать рекомендации:
mantap
С этой целью рекомендуется создать хранимую процедуру
14 мар 12, 10:59    [12244605]     Ответить | Цитировать Сообщить модератору
 Re: Нужна помощь с CHECK  [new]
mantap
Member

Откуда:
Сообщений: 72
alexeyvg,

я то понимаю что лучше следовать рекомендациям, но подскажите как без триггера использовать хранимую процедуру??
14 мар 12, 12:02    [12245155]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить