Sql 是否触发更新列的总和?
我知道这不是一种方式,但这是一个面试问题 使用触发器更新total=marks1+marks2+marks3 我写了类似这样的东西,但在insert语句之后它不会更新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
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
可能没有帮助。至少您为另外两个标记声明了变量,即使它们从未初始化。