2016-07-01 50 views
0

我做了简化Entity Model显示我的相关问题我需要帮助编写的SQL Server触发

我需要Packings一个AFTER INSERT触发器表。

我希望它可以更新dRoastedStocks表中每个咖啡种类的相应行的数量,包括在INSERTED行的Packings中。

数量应该被计算为:

"NewOne" = "OldOne" - "Capacity of selected package" * "Ratio of CoffeeSort in selected Mix" * "Number of packages" 

这里,我使用实体框架实现了它在C#和它完美的作品,如果有人可以把它变成一个SQL Server触发器,我非常感谢它

NewPacking是指添加的行)

//For each CoffeeSort included into selected Mix 
foreach (var mixDetail in NewPacking.Mix.Mix_Details) 
{ 
    // Find row in dRoastedStocks which refers to CoffeeSort 
    var roastedStock = _context.dRoastedStocks.First(x => x.CoffeeSort.Id == mixDetail.CoffeeSort.Id); 
    // Update it's quantity with new value by substracting packed quantity 
    // Packed quantity is calculated as "Capacity of selected package" * "Ratio of CoffeeSort in selected Mix" * "Number of packages" 
    roastedStock.Quantity -= NewPacking.PackQuantity * mixDetail.Ratio/100 * NewPacking.Package.Capacity; 
} 

这是非常复杂的解释,所以我希望方案有点帮助

编辑:这里就是我试图在SQL来写,这是几乎相同的C#我以前写过

CREATE TRIGGER RoastedStocks_Insert_Packing 
ON Packings 
AFTER INSERT 
AS 
    UPDATE dRoastedStocks 
    SET dbo.dRoastedStocks.Quantity = 
      dbo.dRoastedStocks.Quantity - 
      (SELECT Ratio 
       FROM Mix_Details 
       WHERE Mix_Id = (SELECT INSERTED.Mix_Id FROM INSERTED) 
       AND Mix_Details.CoffeeSort_Id = dRoastedStocks.CoffeeSort_Id)/100 
      * (SELECT INSERTED.PackQuantity FROM INSERTED) 
      * (SELECT Capacity FROM Packages WHERE Id = (SELECT INSERTED.Package_Id FROM INSERTED)) 
+0

此外,有'MySQL'或'MS SQL Server'? – Squirrel

+0

@Squirrel这是SQL Server,抱歉给您带来不便。你是什​​么意思我试过了?我试图用SQL编写它并失败。我包括有问题的代码,但我认为它不会有任何用处 –

+0

请向我们展示您的触发代码。 – Squirrel

回答

1

由于很多发布在触发你也是不知道的情况下多行插入立刻。所有这些子查询都会失败,出现“标量......但许多行返回”错误。

看一看这种方法:

UPDATE rs SET 
    Quantity -= md.Ratio/100 * i.PackQuantity * pk.Capacity 
FROM INSERTED i 
INNER JOIN dbo.Mix_Details md 
    ON md.Mix_Id = i.Mix_Id 
INNER JOIN dbo.Packages pk 
    ON pk.Id = i.Package_Id 
INNER JOIN dbo.dRoastedStocks rs 
    ON rs.CoffeeSort_Id = md.CoffeeSort_Id 
+0

作品像一个魅力,非常感谢你 –