【发布时间】:2015-01-16 02:55:54
【问题描述】:
我很惊讶这个问题还没有得到解决,但我在 stackoverflow 中搜索并找不到它。
基本上,我正在尝试在系统中启用批量删除学生帐户,但希望将这些记录存档,以便这些记录仍然可用,只是不再是系统的一部分。
我编写了一个删除触发器来自动将已删除的记录归档到归档表中。
但是,我不知道如何让触发器接受处理多条记录,至少对于插入语句而言。现在,我的 insert into 语句只会将内存中已删除表的第一条记录输入到我的存档表中。我正在使用 SQL Server。
drop trigger trgDelete;
create TRIGGER trgDelete ON KPMG_URecruiting_CIS484_Group21.dbo.Student AFTER DELETE
as begin
Declare @Email varchar (50);
Declare @Password varchar(50);
Declare @FirstName varchar(50);
Declare @MiddleName varchar(50);
Declare @LastName varchar(50);
Declare @PreferredName varchar(50);
Declare @CellPhone char(20);
Declare @Notes varchar(max);
Declare @Institution varchar(100);
Declare @EducationLevel char(20);
Declare @Major varchar(100);
Declare @Minor varchar(100);
Declare @GPA float;
Declare @GradDate date;
Declare @CPA bit;
Declare @Service varchar(100);
Declare @Industry varchar(100);
Declare @Location varchar(100);
Select @Email=d.Email from deleted d;
Select @Password=d.Password from deleted d;
Select @FirstName=d.FirstName from deleted d;
Select @MiddleName=d.MiddleName from deleted d;
Select @LastName=d.LastName from deleted d;
Select @PreferredName=d.PreferredName from deleted d;
Select @CellPhone=d.CellPhone from deleted d;
Select @Notes=d.Notes from deleted d;
Select @Institution=d.Institution from deleted d;
Select @EducationLevel=d.EducationLevel from deleted d;
Select @Major=d.Major from deleted d;
Select @Minor=d.Minor from deleted d;
Select @GPA=d.GPA from deleted d;
Select @CPA=d.CPA from deleted d;
Select @GradDate=d.GradDate from deleted d;
Select @Service=d.Service from deleted d;
Select @Industry=d.Industry from deleted d;
Select @Location=d.Location from deleted d;
Insert into Student_Archive
(
Email, Password, FirstName, MiddleName, LastName, PreferredName, CellPhone, Notes, Institution, EducationLevel, Major, Minor, GPA, GradDate, CPA, Service, Industry, Location, Audit_TimeStamp
)
Values
(
@Email, @Password, @FirstName, @MiddleName, @LastName, @PreferredName, @CellPhone, @Notes, @Institution,@EducationLevel, @Major, @Minor, @GPA, @GradDate, @CPA, @Service, @Industry, @Location, getdate());
end
您能否指出我如何强制触发器执行插入到内存中已删除表中的每条记录,而不仅仅是第一个?非常感谢任何建议。
【问题讨论】:
标签: sql-server triggers