如何使用数学优化触发器?
How do I optimize my trigger using math?
我的触发器有问题,看起来像这样:
CREATE TRIGGER [Balance_monthly]
ON [dbo].[Balance]
FOR INSERT, UPDATE
AS
BEGIN
SET NOCOUNT ON
UPDATE Months
SET Months.Balance_monthly =
CASE
WHEN Balance.In_Months > 1 THEN Amount_Monthly
END
FROM Balance
JOIN Months
ON Months.Id <= Balance.In_Months;
UPDATE Months
SET Months.Balance_monthly =
CASE
WHEN Balance.In_Months >= 13 THEN Amount_Monthly * 2
END
FROM Balance
JOIN Months
ON Months.Id <= Balance.In_Months - 12;
UPDATE Months
SET Months.Balance_monthly =
CASE
WHEN Balance.In_Months >= 25 THEN Amount_Monthly * 3
END
FROM Balance
JOIN Months
ON Months.Id <= Balance.In_Months - 24;
END
这是存储我的触发器的 table,只有 1 行并且它将保持这种状态,所以不要考虑那个。
这是我根据 In_Months 的数量将值放入的 table。
如您所见,在 In_Months 超过 37 之前,它一直运行良好。我的问题是,是否有任何聪明的头脑可以帮助我计算它,无论有多少In_Months有。
我认为这个表达式应该计算你想要的:
UPDATE Months
SET Months.Balance_monthly =
((Balance.In_Months + 12 - Months.Id) / 12) * Amount_Monthly
FROM Balance
CROSS JOIN Months;
假设,如果 In_Months
为 1,我们应该 设置一月份的值。
我的触发器有问题,看起来像这样:
CREATE TRIGGER [Balance_monthly]
ON [dbo].[Balance]
FOR INSERT, UPDATE
AS
BEGIN
SET NOCOUNT ON
UPDATE Months
SET Months.Balance_monthly =
CASE
WHEN Balance.In_Months > 1 THEN Amount_Monthly
END
FROM Balance
JOIN Months
ON Months.Id <= Balance.In_Months;
UPDATE Months
SET Months.Balance_monthly =
CASE
WHEN Balance.In_Months >= 13 THEN Amount_Monthly * 2
END
FROM Balance
JOIN Months
ON Months.Id <= Balance.In_Months - 12;
UPDATE Months
SET Months.Balance_monthly =
CASE
WHEN Balance.In_Months >= 25 THEN Amount_Monthly * 3
END
FROM Balance
JOIN Months
ON Months.Id <= Balance.In_Months - 24;
END
这是存储我的触发器的 table,只有 1 行并且它将保持这种状态,所以不要考虑那个。
这是我根据 In_Months 的数量将值放入的 table。
如您所见,在 In_Months 超过 37 之前,它一直运行良好。我的问题是,是否有任何聪明的头脑可以帮助我计算它,无论有多少In_Months有。
我认为这个表达式应该计算你想要的:
UPDATE Months
SET Months.Balance_monthly =
((Balance.In_Months + 12 - Months.Id) / 12) * Amount_Monthly
FROM Balance
CROSS JOIN Months;
假设,如果 In_Months
为 1,我们应该 设置一月份的值。