Sql 是否触发更新列的总和?

Sql 是否触发更新列的总和?,sql,sql-server,sql-server-2008,Sql,Sql Server,Sql Server 2008,我知道这不是一种方式,但这是一个面试问题 使用触发器更新total=marks1+marks2+marks3 我写了类似这样的东西,但在insert语句之后它不会更新 CREATE table marks ( marks1 int, marks2 int, marks3 int, total int ) SELECT * from marks m insert into marks values(10,10,20,0) drop TRIGGER total_marks create TRI

我知道这不是一种方式,但这是一个面试问题

使用触发器更新total=marks1+marks2+marks3

我写了类似这样的东西,但在insert语句之后它不会更新

CREATE table marks
(
marks1 int,
marks2 int,
marks3 int,
total int
)

SELECT * from marks m

insert into marks values(10,10,20,0)

drop TRIGGER total_marks
create TRIGGER total_marks ON marks
AFTER INSERT
AS
begin
SET NOCOUNT ON

DECLARE @marks1 as int
select @marks1 = inserted.marks1 FROM inserted
DECLARE @marks2 as int
select @marks1 = inserted.marks2 FROM inserted
DECLARE @marks3 as int
select @marks1 = inserted.marks3 FROM inserted
DECLARE @result as int
set @result = @marks1 + @marks2 + @marks3

update marks
set total = @result

SET NOCOUNT OFF
end

触发器不会处理多行插入,会将所有行更新为相同的值(而不仅仅是插入的行),而且要复杂得多。你的钥匙在哪里

CREATE TRIGGER dbo.total_marks 
 ON dbo.marks
 FOR INSERT 
AS
BEGIN
  SET NOCOUNT ON;

  UPDATE m
    SET total = i.marks1 + i.marks2 + i.marks3
    FROM dbo.marks AS m
    INNER JOIN inserted AS i
    ON m.key = i.key;
END
GO
如果您的表确实没有键(对我来说没有太多意义),那么您可以这样说,但它可能会更新已经更新的行:

ON m.marks1 = i.marks1 AND m.marks2 = i.marks2 AND m.marks3 = i.marks3
WHERE m.total = 0;

插入后,更新
查看触发器不会处理多行插入,会将所有行更新为相同的值(而不仅仅是插入的行),而且要复杂得多。你的钥匙在哪里?除了其他问题,为所有三个标记选择进入
@marks1
可能没有帮助。至少您为另外两个标记声明了变量,即使它们从未初始化。