【发布时间】:2014-10-26 17:30:58
【问题描述】:
我有两个表,分别称为 Table_A 和 Table_B。我想创建一个触发器,以便每当 Table_A 中的 payment 字段更新时,应将新记录插入 Table_B 以显示以前的总付款额和现在的总付款额的差额。两张表如下:
Table_A
A_id | payment |
1 | 1000 |
2 | 200 |
Table_B
B_id | difference |
我的触发器实现如下。我不确定如何计算这个差异:
CREATE TRIGGER trigger_Difference
ON Table_A
FOR UPDATE
AS
BEGIN
DECLARE @Difference as INT
DECLARE @PreviousDiff as INT
BEGIN
SELECT @PreviousDiff = SUM(payment)
FROM Table_A
END
if update(payment)
BEGIN
SELECT @Difference = ***don't know what to put here***
FROM inserted
INSERT INTO Table_B (difference) VALUES (@Difference)
END
END
【问题讨论】:
-
提示:添加此付款之前和添加此付款之后的总付款的差异正好等于最近一次付款.
-
您的触发器有 MAJOR 缺陷,因为您似乎认为它会每行调用一次 - 那是不是 b> 情况。触发器每个语句触发一次,因此如果您的
UPDATE语句影响25 行,您将触发触发器一次,然后Inserted和@987654327 @ 每个将包含 25 行。您的代码将在这 25 行中选择哪一行:SELECT @Difference = .... FROM Inserted- 这是不确定的。您需要重写触发器以考虑到这一点!
标签: sql sql-server tsql database-trigger