Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/joomla/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 使用触发器更新2个表_Sql Server_Triggers - Fatal编程技术网

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吗?