我想创建一个触发器来计算下表中的'totalPrice'列
create table materialPriceAndStandard (
id int identity(700,3),
materialName nvarchar(100) not null default (0),
unitPrice decimal(19,2) not null default (0),
carbohydrate tinyint not null default (0),
protein tinyint not null default (0),
fat tinyint not null default (0),
humidity tinyint not null default (0) ,
minerals tinyint not null default (0),
totalPrice decimal(19,2) default(0),
constraint PK_id_materialPriceAndStandard primary key (id),
constraint UQ_materialName_materialPriceAndStandard unique (materialName),
constraint CHECK_totlaMineralAmount check
(carbohydrate + protein + fat + humidity + minerals =100 ))
这是触发器:
create trigger totalPrice
ON materialPriceAndStandard
AFTER insert
as
begin
MaterialPriceAndStandard.totalPrice =
((select _weight from ingredients where
ingredients.material =
materialPriceAndStandard.materialName * materialPriceAndStandard.unitPrice))
end
但是我得到了syntax error
,我应该如何使用totalPrice
表中的“_weight
”列编写触发器以计算“ingredients
”的值。 / p>
totalPrice = _weight * unitPrice。 _weight属于成分表 unitPrice属于materialPriceAndStandard
答案 0 :(得分:1)
您需要使用适当的T-SQL来处理更新。尝试这样的事情:
CREATE TRIGGER totalPrice
ON materialPriceAndStandard
AFTER insert
AS BEGIN
UPDATE mp
SET mp.totalPrice = SUM(ing._weight) * mp.unitPrice
FROM dbo.MaterialPriceAndStandard mp
INNER JOIN Inserted i ON mp.ID = i.ID -- make sure to update *only* those new rows!
INNER JOIN dbo.Ingredients ing ON mp.ID = ing.ID
END
另外:您当前的代码(对我来说)非常不清楚如何加入两个表格,如何计算新TotalPrice
( 价格是你的 _weight 的总和?!?!?!?看起来很奇怪.....) - 你可能需要适应这个。
另外:我可能不会在触发器中执行此操作 - 如果某些内容更新会发生什么? _weight
dbo.Ingredients
列TotalPrice
更改后会发生什么?您是否也必须更新TotalPrice
列?为什么不在你真正需要的时候计算{{1}} - 例如在视图中或在报告工具上。