Sql 如何为这种情况编写触发器?(3张表)

Sql 如何为这种情况编写触发器?(3张表),sql,sql-server,database,Sql,Sql Server,Database,我有三张桌子。将数据添加到生产表时,此产品所需的配料数量将从RawMaterialsWarehouse表中减去。 配料表显示了所消费产品的ID 原料应从配料表中规定的数量乘以生产数量中减去 创建表RawMaterialsWarehouse ID int主键标识1,1不为空, 名称varchar30非空唯一, amountperunit浮点值不为空, 数量浮动不为空 ; 创建表生产 ID int主键标识1,1不为空, ProductsID int外键产品ID引用FinishedProductsWa

我有三张桌子。将数据添加到生产表时,此产品所需的配料数量将从RawMaterialsWarehouse表中减去。 配料表显示了所消费产品的ID

原料应从配料表中规定的数量乘以生产数量中减去

创建表RawMaterialsWarehouse ID int主键标识1,1不为空, 名称varchar30非空唯一, amountperunit浮点值不为空, 数量浮动不为空 ; 创建表生产 ID int主键标识1,1不为空, ProductsID int外键产品ID引用FinishedProductsWarehouse ID不为空, 数量浮动不为空, 日期不为空 ; 制作餐桌配料 ID int主键标识1,1不为空, ProductsID int外键ProductsID引用的FinishedProductsWarehouse ID不为空, RawMaterialsID int外键RawMaterialsID引用的RawMaterialsWarehouse ID不为null, RawMaterialQuantity浮点值不为空 ; 简而言之:

生产:这是产品id及其数量

成分:这是消耗原材料的产品id;原材料id;以及每单位产品的原材料数量

原材料仓库:这是原材料的总数量

当生产+:为该产品指定的所有原材料从原材料仓库中扣除。

在生产时创建触发器TRU生产 插入后,更新 像 将NOCOUNT、XACT\U ABORT设置为ON;-使用这两种方法的最佳实践 更新rm 设置数量=原材料数量-i.数量 从…起 选择i.ProductsID,数量=i.Quantity-ISNULLd.Quantity,0 从插入i LEFT JOIN deleted d ON d.ID=I.ID-对于更新,我们消除了差异 我 在ing.ProductsID=i.ProductsID上进行连接 将RawMaterialsWarehouse rm加入rm.ID=ing.RawMaterialsID上 其中i.数量>0-过滤掉零个更新 去
i是插入的还是成分?i是插入的伪表,ing是成分table@Asel您可以看到Charlieface在SQL中使用的别名:inserted i inserted别名为i,配料ing配料别名为ing.FYI,存储一些东西,比如数量或数量单位,我认为这是浮动价格,这是一个非常糟糕的主意。数量是一个具体而准确的值,而浮动不是一个精确的值;这是一个浮点值。如果您使用的是浮点数,则表示您对不精确的值感到满意,因此不准确。如果你对一些东西求和,比如一堆价格,你很可能会在汇总它们时遇到准确性问题。例如,看看这个。官方文档和可用的教程都非常好。试着去做,而不是让别人帮你做。@Larnu谢谢你的建议,我一开始和他合作就意识到了这一点database@DaleK我只找到了非常简单和基本的查询信息,你能告诉我关于更复杂查询的信息吗?