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

Откуда:
Сообщений: 54
ребята доброй ночи, прошу помочь.

имеется две таблицы (покупки) и (продукты)

покупки
-кто купил
-сколько купил
-id продукта


продукты
-id продукта
-наименование
-сколько на складе

как сделать чтобы при покупке 1 единицы товара или 2-х и более, со склада в таблице прудукты автоматически отнималось количество оставшегося продукта?

кто-то можем скинуть скрипт? купил 2 штуки номер пролдукта 1, значит отними со склада 2 штуки у которых номер продукта = 1...
я чё-то мудрю со скриптом но не выходит.


заранее спасибо
27 июн 12, 22:39    [12785590]     Ответить | Цитировать Сообщить модератору
 Re: вычесть со склада  [new]
alex212121
Member

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

впрочем-то получается просто нужен один маленький код
BEGIN TRAN
BEGIN
INSERT INTO Service ()
VALUES ()

UPDATE Products set kolichestvo_na_sklade=kolichestvo kuplennogo producta pri inserte вычесть из Products.kolichestvo_na_sklade


END

прошу показать код как пишется текст который веделен тут
27 июн 12, 23:15    [12785774]     Ответить | Цитировать Сообщить модератору
 Re: вычесть со склада  [new]
Злой Бобр
Member

Откуда: Украина, Кривой Рог
Сообщений: 3604
alex212121,

UPDATE Products set kolichestvo_na_sklade=(select kolichestvo_na_sklade from Products where id=id1)-k1

Ну где-то так примерно.
28 июн 12, 02:12    [12786109]     Ответить | Цитировать Сообщить модератору
 Re: вычесть со склада  [new]
Glory
Member

Откуда:
Сообщений: 104751
alex212121
UPDATE Products set kolichestvo_na_sklade=kolichestvo kuplennogo producta pri inserte вычесть из Products.kolichestvo_na_sklade

"kolichestvo kuplennogo producta pri inserte"
вы уже где-то определили в команде INSERT INTO Service () VALUES ()
"вычесть из Products.kolichestvo_na_sklade" есть опретор -(минус)
28 июн 12, 11:23    [12787450]     Ответить | Цитировать Сообщить модератору
 Re: вычесть со склада  [new]
alex212121
Member

Откуда:
Сообщений: 54
Злой Бобр,

спасибо, но только что такое K1 ЧЁ-ТО НЕ ИДЁТ
28 июн 12, 20:37    [12790860]     Ответить | Цитировать Сообщить модератору
 Re: вычесть со склада  [new]
Злой Бобр
Member

Откуда: Украина, Кривой Рог
Сообщений: 3604
alex212121
спасибо, но только что такое K1 ЧЁ-ТО НЕ ИДЁТ

kolichestvo kuplennogo producta pri inserte
Я ж незнаю как там у тебя переменная называется, вот и обозвал к1. А ты вместо нее свою втыкай.
28 июн 12, 21:11    [12791016]     Ответить | Цитировать Сообщить модератору
 Re: вычесть со склада  [new]
alex212121
Member

Откуда:
Сообщений: 54
Злой Бобр,

прошу помоч не понимаю в чём дело

всё получилось
сначало делаю ИНСЕРТ В продукты, потом через ЕКЗЕК в Сервис...
вычитает делает...
но когда хочу повторить тот же самый ЕКЗЕК - в сервис добавляет а в продуктак не вычитает и ошибку выводит - ПИШЕТ ТАКУЮ ШТУКУ

(1 row(s) affected)
Msg 512, Level 16, State 1, Procedure SKLAD, Line 47
Subquery returned more than 1 value. This is not permitted when the subquery follows =, !=, <, <= , >, >= or when the subquery is used as an expression.
The statement has been terminated.



CREATE TABLE Service
(
Service_ID INT NOT NULL PRIMARY KEY IDENTITY(1,1),
ტექნიკოსი NVARCHAR(100),
კლიენტის_ID INT,
მომსახურება_აღწერა NVARCHAR(500),
მოწყობილობის_ტიპი_დასახელება NVARCHAR(500),
გაყიდული_ნაწილის_ID INT,
გაყიდული_ნაწილის_რაოდენობა INT,
გავლილი_კილომეტრაჟი INT,
მომსახურების_ღირებულება INT,
ნაწილის_ღირებულება INT,
გამოძახების_ღირებულება INT,
CreateDate DATETIME DEFAULT GETDATE()
)



CREATE TABLE Clients
(
Clients_ID INT NOT NULL PRIMARY KEY IDENTITY(1,1),
კლიენტის_სახელი NVARCHAR(100) NOT NULL,
კლიენტის_გვარი NVARCHAR(100) NOT NULL,
კლიენტის_პირადობის_ნომერი INT NOT NULL,
სერვისების_რაოდენობა INT,
CreateDate DATETIME DEFAULT GETDATE()
)

CREATE TABLE Products
(
Products_ID INT NOT NULL PRIMARY KEY IDENTITY(1,1),
სახელი NVARCHAR(100),
დასახელება NVARCHAR(100),
რაოდენობა_საწყობში INT,
ფასი INT NOT NULL
)



alter PROCEDURE SKLAD (
@ტექნიკოსი NVARCHAR(100),
@კლიენტის_ID INT,
@მომსახურება_აღწერა NVARCHAR(500),
@მოწყობილობის_ტიპი_დასახელება NVARCHAR(500),
@გაყიდული_ნაწილის_ID INT,
@გაყიდული_ნაწილის_რაოდენობა INT,
@გავლილი_კილომეტრაჟი INT,
@მომსახურების_ღირებულება INT,
@ნაწილის_ღირებულება INT,
@გამოძახების_ღირებულება INT
)
AS
BEGIN



BEGIN TRAN

BEGIN
INSERT INTO Service (
ტექნიკოსი,
კლიენტის_ID,
მომსახურება_აღწერა,
მოწყობილობის_ტიპი_დასახელება,
გაყიდული_ნაწილის_ID,
გაყიდული_ნაწილის_რაოდენობა,
გავლილი_კილომეტრაჟი ,
მომსახურების_ღირებულება,
ნაწილის_ღირებულება,
გამოძახების_ღირებულება
)
VALUES (
@ტექნიკოსი,
@კლიენტის_ID,
@მომსახურება_აღწერა,
@მოწყობილობის_ტიპი_დასახელება ,
@გაყიდული_ნაწილის_ID,
@გაყიდული_ნაწილის_რაოდენობა ,
@გავლილი_კილომეტრაჟი ,
@მომსახურების_ღირებულება ,
@ნაწილის_ღირებულება ,
@გამოძახების_ღირებულება
)


UPDATE Products set რაოდენობა_საწყობში=(select რაოდენობა_საწყობში from Products where @გაყიდული_ნაწილის_ID=Products_ID)-(SELECT გაყიდული_ნაწილის_რაოდენობა FROM Service inserted)



END

COMMIT TRAN

END


insert into Products (სახელი, დასახელება, რაოდენობა_საწყობში, ფასი) values ('com rizer','com portis habi','10','10')

exec SKLAD
@ტექნიკოსი='aleksandre',
@კლიენტის_ID='1',
@მომსახურება_აღწერა='gacmenda',
@მოწყობილობის_ტიპი_დასახელება='nurit800' ,
@გაყიდული_ნაწილის_ID='1',
@გაყიდული_ნაწილის_რაოდენობა= '1',
@გავლილი_კილომეტრაჟი ='0',
@მომსახურების_ღირებულება ='20',
@ნაწილის_ღირებულება ='100',
@გამოძახების_ღირებულება='20'



всё получилось
сначало делаю ИНСЕРТ В продукты, потом через ЕКЗЕК в Сервис...
вычитает делает...
но когда хочу повторить тот же самый ЕКЗЕК - в сервис добавляет а в продуктак не вычитает и ошибку выводит - ПИШЕТ ТАКУЮ ШТУКУ

(1 row(s) affected)
Msg 512, Level 16, State 1, Procedure SKLAD, Line 47
Subquery returned more than 1 value. This is not permitted when the subquery follows =, !=, <, <= , >, >= or when the subquery is used as an expression.
The statement has been terminated.



прошу помоч не понимаю в чём дело
28 июн 12, 21:47    [12791195]     Ответить | Цитировать Сообщить модератору
 Re: вычесть со склада  [new]
alex212121
Member

Откуда:
Сообщений: 54
Злой Бобр,

СЕЙЧАС СДЕЛАЛ ТРИГГЕР, И ОПЯТЬ ТОЖЕ САМОЕ


CREATE trigger dbo.sklad_trigger
on dbo.Service
after insert
as
begin
UPDATE Products set КОЛИЧЕСТВОНАСКЛАДЕ=(select КОЛИЧЕСТВОНАСКЛАДЕ from Products where (select s.ПРОДАННЫЙТОВАР_ID from Service as s)=Products_ID)-(SELECT КОЛИЧЕСТВОПРОДАННОГО FROM Service inserted)
end


И ПОСЛЕ ОБЫЧНЫЙ ИНТЕРСТ В Сервис

выходит



Subquery returned more than 1 value. This is not permitted when the subquery follows =, !=, <, <= , >, >= or when the subquery is used as an expression.
28 июн 12, 22:13    [12791327]     Ответить | Цитировать Сообщить модератору
 Re: вычесть со склада  [new]
Гавриленко Сергей Алексеевич
Member

Откуда:
Сообщений: 37254
Ну так все написано английским по-белому. Чего не понятного-то?
28 июн 12, 22:34    [12791417]     Ответить | Цитировать Сообщить модератору
 Re: вычесть со склада  [new]
alex212121
Member

Откуда:
Сообщений: 54
Гавриленко Сергей Алексеевич,

ну не могу понять как это испраывить. если знаете прошу разъяснить, заранее спасибо
28 июн 12, 22:39    [12791445]     Ответить | Цитировать Сообщить модератору
 Re: вычесть со склада  [new]
alex212121
Member

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

прошу написать конкретно что именно нужно делать чтобы это не выходжило и происходил бы инсерт с вычетанием со склада. какой код куда вписывать

спасибо
28 июн 12, 22:57    [12791518]     Ответить | Цитировать Сообщить модератору
 Re: вычесть со склада  [new]
Злой Бобр
Member

Откуда: Украина, Кривой Рог
Сообщений: 3604
alex212121,

Кроме того что неправильный элементарный синтаксис так еще и триггер написан неверно. Включи мозг и подумай что он тебе сделает. В общем выучить сначала теорию и только потом пытаться лепить сферического коня в ваккууме.
29 июн 12, 11:05    [12793132]     Ответить | Цитировать Сообщить модератору
 Re: вычесть со склада  [new]
alex212121
Member

Откуда:
Сообщений: 54
Злой Бобр,

ВОТ КОД - ВСЁ РАБОТАЕТ


ALTER trigger dbo.sklad_trigger
on dbo.Service
AFTER INSERT,UPDATE
AS
DECLARE @გაყიდული_ნაწილის_ID INT, @გაყიდული_ნაწილის_რაოდენობა INT
SET @გაყიდული_ნაწილის_ID = (SELECT გაყიდული_ნაწილის_ID FROM INSERTED)
SET @გაყიდული_ნაწილის_რაოდენობა = (SELECT გაყიდული_ნაწილის_რაოდენობა FROM INSERTED)

UPDATE Products set რაოდენობა_საწყობში=(select რაოდენობა_საწყობში from Products where @გაყიდული_ნაწილის_ID=Products_ID)-@გაყიდული_ნაწილის_რაოდენობა
GO
30 июн 12, 12:18    [12798262]     Ответить | Цитировать Сообщить модератору
 Re: вычесть со склада  [new]
Гавриленко Сергей Алексеевич
Member

Откуда:
Сообщений: 37254
alex212121
ВОТ КОД - ВСЁ РАБОТАЕТ
Ну-ну. Вас ждут удивительные спецэффекты, когда в таблицу будет инсертиться или апдейтиться больше одной записи за раз.
30 июн 12, 12:46    [12798303]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить