【发布时间】:2017-03-19 00:41:16
【问题描述】:
救命!!我已经束手无策了!!
我一直在尝试创建一个更新触发器,以便在更新时将值插入另一个表。
TBL_PUPILS:
Age smallint
Height smallint
Weight smallint
Class int
SurName varchar(28)
Sick_Days smallint
困难在于每个学生都通过前 5 列的连接来唯一标识。
我已经成功创建了 INSERT TRIGGER;
CREATE Trigger [dbo].[tr_tbl_Pupils_For_Insert]
ON [dbo].[tbl_Pupils]
FOR INSERT
AS
BEGIN
DECLARE @Age smallint, @Height smallint, @Weight int, @Class int, @SurName varchar(28), @Sick_Days int
Select @Age = Age, @Height = Height, @Weight = Weight, @Class = Class, @SurName = SurName, @Sick_Days = Sick_Days
From inserted
insert into tbl_Pupil_Detail Values(@Age, @Height, @Weight, @Class, 'New', @SurName, @Sick_Days, GETDATE(), CURRENT_TIMESTAMP)
END
上面的插入触发器将用于捕获新学生加入时的日期时间等。
当修改现有学生的病假天数时,如何创建类似的 UPDATE TRIGGER?
如果您需要更多信息,请告诉我!
【问题讨论】:
-
您的插入触发器存在缺陷,因为它无法处理多行插入。插入语句应该是“插入...选择...从插入”。您应该在 5 列上有一个复合主键,并在更新触发器中,在这 5 列上连接插入和瞳孔详细信息,以识别需要更新的行。
-
如果学生体重增加了怎么办?还是增长?
-
还是从一个班转到另一个班?
-
我刚刚使用了一个具有完全相同表结构的示例表。 Sick_days 是唯一可以更新的列
-
旁白:如果您确实需要编写一个只能处理一行的触发器,那么它应该检查
inserted(或deleted)中的行数并使用@987654325 @ 或RaIsError自豪地宣布它的局限性。
标签: sql sql-server tsql triggers dml