首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >AdventureWorks清单触发器

AdventureWorks清单触发器
EN

Stack Overflow用户
提问于 2017-04-25 07:38:10
回答 2查看 1.6K关注 0票数 0

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

创建触发器tgrExcessInventory

在production.productinventory上

更新后

作为

开始

(这就是我在sql语句中迷路的地方,我需要执行该语句以确保不超过限制。)

我需要什么样的语言才能让这个触发器的上限达到1000?

EN

回答 2

Stack Overflow用户

发布于 2017-08-05 22:56:28

可能有点晚了,但试试这个:

代码语言:javascript
复制
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

这里的代码将触发触发器,在这种情况下,您可以看到set quantity = quantity +任何使其达到1000或更大的值,也可以直接set quantity = 1000+

票数 2
EN

Stack Overflow用户

发布于 2017-04-25 16:12:50

  • 您确定要在更新上检查它吗?根据我的逻辑,当你更新一个值时,它意味着这个值是存在的,因此库存数量不会被修改。您可能想要为INSERT
  • As创建一个触发器,作为对库存数量的检查,您可以对您的表进行简单的计数。

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

你应该查看This问题以获得更多的答案。不幸的是,MSSQL不支持戈登·利诺夫在评论中提到的“更新之前的”,但是您可以轻松地在触发器中使用DELETED和INSERTED表。

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43599279

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档