【发布时间】:2012-03-20 09:34:54
【问题描述】:
我有一个表格,可以计算上个月的总扣除额和剩余扣除额。
并且旧月份剩余扣除额中的任何更新都应按顺序影响接下来的几个月,因此我为此表创建了一个AFTER UPDATE触发器,但我注意到@987654322没有调用该触发器@下个月。
检查触发代码
CREATE TRIGGER [dbo].[tgUpdateRemainingBalance]
ON [dbo].[GAT_MONTHLY_DEDUCTION]
AFTER UPDATE
AS
BEGIN
SET NOCOUNT ON;
DECLARE @OldTotalDeduction INT
DECLARE @NewTotalDeduction INT
DECLARE @OldRemainingToNextMonth INT
DECLARE @NewRemainingToNextMonth INT
SELECT @OldRemainingToNextMonth = RemainingToNextMonth,
@OldTotalDeduction = TotalDeduction
FROM DELETED
SELECT @NewRemainingToNextMonth = RemainingToNextMonth,
@NewTotalDeduction = TotalDeduction
FROM INSERTED
DECLARE @EmpNo BIGINT
DECLARE @RegDate DATETIME
SELECT @EmpNo = PersonnelNo, @RegDate = RegDate FROM INSERTED
IF (@OldRemainingToNextMonth <> @NewRemainingToNextMonth) OR (@OldTotalDeduction <> @NewTotalDeduction)
BEGIN
UPDATE GAT_MONTHLY_DEDUCTION
SET TotalDeduction = TotalDeduction - @OldRemainingToNextMonth + @NewRemainingToNextMonth,
Visited = 1
WHERE RegDate = DATEADD(month, 1, @RegDate) AND PersonnelNo = @EmpNo
END
END
我正在为具有此触发器的同一个表进行更新,但第一次调用触发器应该再次调用触发器以进行下一次更新,但它没有发生。
我迫切需要知道如何解决它。
谢谢
【问题讨论】:
-
欢迎使用 StackOverflow:如果您发布代码、XML 或数据示例,请在文本编辑器中突出显示这些行并单击“代码示例”按钮 (
{ }) 在编辑器工具栏上很好地格式化和语法突出显示它! -
您能否让我们更好地了解您要完成的工作?看起来您想要在更改的月份之后的所有月份更新 TotalDeduction,但无法从触发器内触发触发器。我问,因为现在写的方式只会在下个月更新,即使为后续更新调用了触发器:唯一改变的字段是 TotalDeduction 和 Visited,并且由于 RemainingToNextMonth 没有改变,后续更新不会有任何变化,除了访问的标志。
标签: sql-server tsql triggers