我创建了以下TSQL触发器,只要底层表更新,它就会永远运行。
CREATE TRIGGER Trigger_MDSS_ComputeAggregates
ON dbo.MonthlyDetectionScoresSums
AFTER UPDATE, INSERT
AS
BEGIN
update dbo.MonthlyDetectionScoresSums
SET
YPElec = CAST(COALESCE (i.YPLocChain_TotElec, i.YPGlobChain_TotElec, i.YPSIC_TotElec) AS real),
YPGas = CAST(COALESCE (i.YPLocChain_TotGas, i.YPSIC_TotGas) AS real)
from MonthlyDetectionScoresSums mdss
inner join INSERTED i on i.ACI_OI = mdss.ACI_OI
END
GO
你知道为什么它可能会运行很长时间吗?
答案 0 :(得分:5)
我可以建议你使用computed columns并放下触发器吗?
ALTER TABLE dbo.MonthlyDetectionScoresSums ADD
YPElec AS CAST(COALESCE (YPLocChain_TotElec, YPGlobChain_TotElec, YPSIC_TotElec) AS real)
YPGas AS CAST(COALESCE (YPLocChain_TotGas, YPSIC_TotGas) AS real)
从我看到的,您正在更新刚刚更新/插入的行。数据库引擎将为您完成,无需触发器。
答案 1 :(得分:2)
您是否启用了递归触发器?
虽然应该终止无限循环,但是如果您的更新非常大,可能需要很长时间才能达到32的嵌套限制: