Sql server 使用触发器更新2个表
我有两张桌子:Sql server 使用触发器更新2个表,sql-server,triggers,Sql Server,Triggers,我有两张桌子: 表订单:IDOrder(主键)、ProductId、数量、价格 表产品:产品ID(主键)、名称、…、数量 我想在添加订单表的数量时更改产品表的数量。但这是行不通的 这是我的扳机: CREATE TRIGGER [dbo].[trg_updatequantity] On [dbo].[order] FOR UPDATE AS IF UPDATE(quantity) UPDATE product SET product.quantity =
- 表
:IDOrder(主键)、ProductId、数量、价格订单
- 表
:产品ID(主键)、名称、…、数量产品
CREATE TRIGGER [dbo].[trg_updatequantity]
On [dbo].[order]
FOR UPDATE
AS
IF UPDATE(quantity)
UPDATE product
SET product.quantity = product.quantity - (inserted.quantity - deleted.quantity)
FROM (deleted
INNER JOIN inserted ON deleted.IDOrder = inserted.IDOrder)
INNER JOIN product ON product.productId = inserted.ProductId
试试这个
Create trigger [dbo].[trg_updatequantity]
On [dbo].[order]
FOR INSERT
AS
update product SET quantity= a.quantity - b.quantity
from product a
inner join (
SELECT ProductID, SUM( ISNULL( quantity, 0))quantity
FROM inserted
GROUP BY ProductID) b
ON a.ProductID = b.ProductID
您应该知道,当按表顺序更新多条记录时,此触发器将只触发一次,并且删除和插入的触发器将包含多条记录。我该怎么办(你应该怎么做?你有一些选择,一个是像Alfaiz的回答那样写你的更新触发器,或者你可以用慢速的方法,也就是在触发器中插入的表上写一个游标。然后你可以循环通过这个游标。请注意,这对性能非常有害,但我刚学了SQL一个月……我不明白d关于光标。也许我应该了解更多。谢谢你,我会非常感谢你,这解决了我的问题,但我认为quantity=a.quantity-b.quantity=))谢谢如果产品A有250个,而你销售了部分产品A,比如说20个,那么它将减少产品的总数量,如果我没有错的话,剩余的230个。但是如果数量=A.数量-b.数量,在这种情况下,它将被正确添加。因此,它将使总数量为270。如果我没有错,但是当我使用触发器时,我选择了2个产品,如果我对每一行都使用,那么它只能添加1吗?