我对此有些新意,但想写一些第一个简单的触发器。 如果我有字段A,B,C的mytable。 当用户插入或更新A和B时,我想通过触发器更新C = A + B. 会容易吗?感谢
答案 0 :(得分:2)
这是一个触发器,可以按照你的要求进行操作。由于mytable中缺少ID列,因此无法仅为已更新的行指定update c(即每次插入/更新时每行都将重新计算c
的值)。
CREATE TRIGGER mytrigger
ON mytable
FOR INSERT, UPDATE
AS
UPDATE mytable
SET c = COALESCE(a, 0) + COALESCE(b, 0)
这将是计算列的合适候选者:
CREATE TABLE mytable
(
a INT,
b INT,
c AS COALESCE(a, 0) + COALESCE(b, 0)
)
修改:ID列的示例仅更新c
更新/插入的行:
CREATE TRIGGER mytrigger
ON mytable
FOR INSERT, UPDATE
AS
UPDATE mytable
SET c = COALESCE(a, 0) + COALESCE(b, 0)
WHERE ID IN (SELECT ID
FROM inserted)
我已经创建了一个SQL Fiddle,你可以在这里看到这个。
让您了解SQL Fiddle示例:
c
此时未填充)。 c
现已填充)。c
已填充此新行。)更多地解释一下这是如何工作的 - 在触发器执行期间,SQL服务器(我现在假设你正在使用它)创建了两个临时表inserted
和deleted
受影响的行的副本 - 如果我们需要从中获取数据,我们可以加入或从这些表中选择;在这种情况下,只需获取受更新/插入操作影响的ID列表,然后仅更新c
这些行。有关详细信息,请参阅this MSDN article。