AdventureWorks库存触发器

时间:2017-04-24 23:38:10

标签: sql sql-server adventureworks

我的库存需要限制。我应该确保我的主仓库的库存数量永远不会超过1000。所有多余的单元都被发送到外部存储站点并单独跟踪。我需要为" ProductInventory"写一个触发器。表格,以确保有更新时库存不能超过1000个单位。

CREATE TRIGGER tgrExcessInventory

ON production.productinventory

更新后

AS

BEGIN

(这是我在sql语句中迷失的地方,我需要做的是确保不超过我的限制。)

我需要哪种语言才能将此触发上限设为1000?

2 个答案:

答案 0 :(得分: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或更多,并且还在那里触发&#39;直接设置数量= 1000+ < / p>

答案 1 :(得分:0)

  • 您确定必须在更新上查看吗?至于我的逻辑 当你更新一个值时它意味着值存在 因此库存数量不会被修改。你可能想要 为 INSERT
  • 创建了触发器
  • 就检查库存数量而言,您可以对表格进行简单计算。

    IF (SELECT COUNT(1) FROM production.productinventory) >= 1000
    BEGIN
        //Do your thing
    END
    

您应该查看This问题以获得更多答案。不幸的是,MSSQL不支持Gordon Linoff在评论中提到的“ BEFORE UPDATE ”,但您可以轻松使用 DELETED INSERTED 表格。触发。

我希望它有所帮助!干杯!