2016-07-15 7 views
0

я задавался вопросом, в соответствии с приведенной ниже схемойКак обновить таблицу на основе значений в другой таблице

Как я могу держать инвентаризации значения вне запаса обновляются в зависимости от продукта значений Кол-во в orderDetail таблице.

, например, у меня есть следующие данные примеры

OrderDetail

Order-id Product-id Qty 
1   1   5 

Inventory

Inventory-id Date  Product-id In-stock Out-stock stock-left 
1    1/1/2016 1   10  5   5 

позволяет сказать, в заказ-деталь таблицы значения Кол-во изменяется на 1 как я могу изменить его на 1 также в таблице инвентаризации.

Схема enter image description here

+0

Вероятно, триггер базы данных может помочь с этим. Вы рассматривали этот вариант? –

+0

Нет примеров, похожих на мой случай. Спасибо – Ayman

+3

Я думаю, проблема в том, что ваш дизайн испорчен. Нет никаких оснований хранить количество акций, проданных в таблице инвентаря. Значение может и должно быть рассчитано с использованием информации о заказе в реальном времени, когда вам это нужно. Подумайте, насколько это сложно, когда вы возвращаете вещи и т. Д. Здесь вам нужно исправить реляционную модель. –

ответ

0

Вы можете использовать триггеры для распространения значения

CREATE TRIGGER [dbo].[inventory_update] ON [dbo].[OrderDetail] 
    FOR UPDATE 
    AS 
    BEGIN 

     UPDATE Inventory 
     SET OutStock = inserted.Qty 
     FROM inserted 
     WHERE Inventory.inventory-id = inserted.inventory-id 

    END 
+0

Как вы, наверное, догадались, что ошибка 'Inventory.inventory-id' не определена. –

0

Использование Upsert Уолд помощь здесь

MERGE INTO tablename USING table_reference ON (condition) 
WHEN MATCHED THEN 
UPDATE SET column1 = value1 [, column2 = value2 ...] 
WHEN NOT MATCHED THEN 
INSERT (column1 [, column2 ...]) VALUES (value1 [, value2 ...]); 
0

Первая вещь, я бы сказал, вычисляемые члены не следует использовать в качестве атрибута в таблице. Пример =>Стол = (Общее количество) - (Количество проданного). Это должно быть расчетный член, ничего, кроме выражения в SQL.

Кстати, вы можете решить эту проблему с помощью UPDATE TRIGGER

Смежные вопросы