SQL Server уменьшает инвентаризацию - PullRequest
0 голосов
/ 31 марта 2012

Я использую SQL Server 2008. У меня есть таблица, в которой записываются заказы с SKU, таблица инвентаризации с подсчетом и таблица, в которой записывается связь между проданным SKU и товарно-материальными запасами.

В итоге я получил такой отчет

 Inventory CurrentQuantity OpenedOrder
   SKU1        300             50
   SKU2        100             10

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

т.е.

Если в заказе было обработано 2 SKU1, в таблице инвентаря автоматически отобразится 298.

Спасибо

Ответы [ 5 ]

2 голосов
/ 31 марта 2012

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

CREATE PROC dbo.ProcessOrder
    @Item int,
    @Quantity int
AS
BEGIN
    --Update order table here
    INSERT INTO dbo.Orders(ItemID,Quantity)
    VALUES (@ItemID, @Quantity)

    --Update Inventory here
    UPDATE dbo.Inventory
    SET CurrentQuantity = CurrentQuantity - Quantity
    WHERE ItemID = @ItemID


END
1 голос
/ 31 марта 2012

Я думаю, что вы ищете, это триггер

По сути, установите триггер, который будет обновлять соответствующие столбцы с использованием вставленных / обновленных данных.Без полного набора схем это лучший ответ, который я могу дать на данный момент

0 голосов
/ 01 апреля 2012

Вы можете использовать триггер, также использовать процедуру и конкретные шаги сверху, используйте процедуру, необходимую для открытия функции atuo exec в mastaer DB.

0 голосов
/ 01 апреля 2012

Я бы обычно советовал использовать триггер, но обычная манипуляция - это такая операция, которая обычно выполняется много раз, иногда в пакетах, и это не лучший сценарий для триггеров, если честно.

Я думаю, что идея PKG очень хорошая, но вы никогда не должны забывать добавить к ней контроль транзакций, в противном случае вы можете получить несоответствующие акции:

CREATE PROC dbo.ProcessOrder
    @Item int,
    @Quantity int
AS
BEGIN
    begin transaction my_tran
    begin try 
        --Update order table here
        INSERT INTO dbo.Orders(ItemID,Quantity)
        VALUES (@ItemID, @Quantity)

        --Update Inventory here
        UPDATE dbo.Inventory
        SET CurrentQuantity = CurrentQuantity - Quantity
        WHERE ItemID = @ItemID
        commit transaction
    end try
    begin catch
        rollback transaction
        --raise error if necessary
    end catch
END
0 голосов
/ 31 марта 2012

Я бы не стал сам искать триггер для этого.

Мой процесс проверки

Start a transaction
Check stock level.
If OK, (optional validation / authorisation)
Add a check out record
Reduce the stock
Possibly add some record to invoice teh recipent etc.
Commit the transaction

Несмотря на то, что вы могли бы сделать это с помощью триггеров, я просто не вижу смысла, я просто собираюсь найти хорошую простую и понятную хранимую процедуру SP_CheckOut.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...