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

Откуда:
Сообщений: 31
Здравствуйте. Помогите пожалуйста разобраться с триггером.
У меня есть три таблицы


Как создать триггер. Чтобы при добавлении новой записи в таблицу "Расходная_ведомость", из Продукт.Количество вычиталось вычисляемое поле: Расходная_ведомость.Расход_продукта = Порция.Норма_порции * Расходная_ведомость.Количество_порций

К сообщению приложен файл. Размер - 114Kb
19 сен 16, 10:17    [19681553]     Ответить | Цитировать Сообщить модератору
 Re: Триггер. Удаление товара из общего колличества  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31863
Виктор27
Как создать триггер
А у вас что получилось, какой вариант?
19 сен 16, 10:34    [19681630]     Ответить | Цитировать Сообщить модератору
 Re: Триггер. Удаление товара из общего колличества  [new]
Виктор27
Member

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

Я искал в интернете, нашел кусочек, но это если не вычисляемый столбец. У меня получилось так:
CREATE TRIGGER Test
ON Расходная_ведомость
AFTER INSERT
AS
BEGIN
SELECT Расходная_ведомость.Количество_порций, Порция.Норма_порции * Расходная_ведомость.Количество_порций AS Расход_продукта
FROM Расходная_ведомость, Порция
WHERE Расходная_ведомость.ID_продукта = Порция.ID_продукта And
Расходная_ведомость.ID_блюда = Порция.ID_блюда
-- Если количество строк = 0
--DECLARE @Расход_продукта FLOAT
--FROM Расходная_ведомость, Порция
--SET @Расход_продукта = Порция.Норма_порции * Расходная_ведомость.Количество_порций
	--IF @@ROWCOUNT = 0
	--RETURN
	UPDATE Продукт
	SET Количество = (s.Количество - Расход_продукта)
	FROM Продукт s JOIN inserted i
	ON s.ID = i.ID_продукта
END


Не работает. Помогите пожалуйста.
19 сен 16, 10:48    [19681694]     Ответить | Цитировать Сообщить модератору
 Re: Триггер. Удаление товара из общего колличества  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31863
Виктор27
alexeyvg,

Я искал в интернете, нашел кусочек, но это если не вычисляемый столбец. У меня получилось так:

Не работает. Помогите пожалуйста.

Во первых, в вашем триггере не нужен первый SELECT. Или это для отладки?

Далее, идея правильная - обновлять таблицу командой UPDATE, привязав Продукт к обновляемым записям в таблице inserted

Но кроме связки ON s.ID = i.ID_продукта нужно ещё привязать порции
UPDATE s
	SET Количество = (s.Количество - i.Количество_порции * p.Норма_порции_кг)
	FROM Продукт s 
	JOIN inserted i
		ON s.ID = i.ID_продукта
	JOIN Порция p
		ON i.ID_продукта = p.ID_продукта
		AND i.ID_блюда = p.ID_блюда


Для проверки обновления замените в триггере UPDATE на SELECT, что бы увидеть, что обновится, так удобно отлаживать:
SELECT i.ID_продукта, 
	Количество = (s.Количество - i.Количество_порции * p.Норма_порции_кг)
	FROM Продукт s 
	JOIN inserted i
		ON s.ID = i.ID_продукта
	JOIN Порция p
		ON i.ID_продукта = p.ID_продукта
		AND i.ID_блюда = p.ID_блюда
19 сен 16, 11:53    [19682049]     Ответить | Цитировать Сообщить модератору
 Re: Триггер. Удаление товара из общего колличества  [new]
Виктор27
Member

Откуда:
Сообщений: 31
alexeyvg, Работает))) Огромное Вам спасибо. Выручили сильно)
19 сен 16, 12:38    [19682243]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить