AdventureWorks Inventory Trigger
Мой инвентарь нуждается в ограничениях. Я должен убедиться, что количество моего инвентаря никогда не превышает 1000 для моего основного склада. Все лишние единицы отправляются на внешнее хранилище и отслеживаются отдельно. Мне нужно написать триггер для таблицы "ProductInventory", чтобы убедиться, что инвентарь не может превышать 1000 единиц при обновлении.
СОЗДАТЬ ТРИГГЕР tgrExcessInventory
ПО ПРОИЗВОДСТВУ
ПОСЛЕ ОБНОВЛЕНИЯ
КАК
НАЧАТЬ
(Здесь я теряюсь в выражении sql, которое мне нужно сделать, чтобы убедиться, что мой лимит не превышен.)
Какой язык мне нужен, чтобы сделать этот предел триггера на 1000?
2 ответа
Возможно, немного поздно, но попробуйте это:
CREATE TRIGGER tgrExcessInventory
on Production.ProductInventory
FOR UPDATE
AS
IF EXISTS
(SELECT 'True'
FROM Inserted i
JOIN Deleted d
ON i.productID = d.ProductID
AND i.locationID = d.LocationID
WHERE (d.quantity + i.quantity) >= 1000 OR
i.quantity >=1000
)
BEGIN
RAISERROR('Cannot increase stock where units would be over 1,000 units',16,1)
ROLLBACK TRAN
END
Код здесь будет запускать триггер, если есть сценарий, в котором вы видите установленное количество = количество + любое значение, которое доведет его до 1000 или более, а также запускает его, есть прямое установленное количество = 1000+
- Вы уверены, что должны проверить это на ОБНОВЛЕНИЕ? Что касается моей логики, когда вы обновляете значение, это означает, что значения существуют, следовательно, количество запаса не изменяется. Возможно, вы захотите создать триггер для INSERT
Что касается проверки количества инвентаря, вы можете сделать простой подсчет на вашем столе.
IF (SELECT COUNT(1) FROM production.productinventory) >= 1000 BEGIN //Do your thing END
Вы должны проверить этот вопрос для получения дополнительных ответов. К сожалению, MSSQL не поддерживает "BEFORE UPDATE", как упомянул Гордон Линофф в комментариях, но вы можете легко работать с таблицами DELETED и INSERTED в триггере.
Я надеюсь, что это помогает! Ура!