我做了简化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))
此外,有'MySQL'或'MS SQL Server'? – Squirrel
@Squirrel这是SQL Server,抱歉给您带来不便。你是什么意思我试过了?我试图用SQL编写它并失败。我包括有问题的代码,但我认为它不会有任何用处 –
请向我们展示您的触发代码。 – Squirrel