【问题标题】:Archiving Multiple Records using a Delete Trigger使用删除触发器归档多条记录
【发布时间】: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


    【解决方案1】:

    好吧,直接发送INSERT

    create TRIGGER trgDelete ON KPMG_URecruiting_CIS484_Group21.dbo.Student AFTER DELETE
    as 
    begin
    
        Insert into Student_Archive 
        (
            Email, Password, FirstName, MiddleName, LastName, PreferredName, CellPhone, Notes, Institution, EducationLevel, Major, Minor, GPA, GradDate, CPA, Service, Industry, Location, Audit_TimeStamp
        )
        SELECT Email, Password, FirstName, MiddleName, LastName, PreferredName, CellPhone, Notes, Institution, EducationLevel, Major, Minor, GPA, GradDate, CPA, Service, Industry, Location, Audit_TimeStamp, getdate()
        FROM DELETED;
    
    end
    

    【讨论】:

      【解决方案2】:

      试试这个 - 只是一个不错的、简单的基于集合的方法:

      CREATE TRIGGER trgDelete 
      ON KPMG_URecruiting_CIS484_Group21.dbo.Student 
      AFTER DELETE
      AS BEGIN
          INSERT INTO dbo.Student_Archive (Email, Password, FirstName, MiddleName, LastName, PreferredName, CellPhone, Notes, Institution, EducationLevel, Major, Minor, GPA, GradDate, CPA, Service, Industry, Location, Audit_TimeStamp)
             SELECT
                Email, Password, FirstName, MiddleName, LastName, PreferredName, CellPhone, Notes, Institution, EducationLevel, Major, Minor, GPA, GradDate, CPA, Service, Industry, Location, SYSDATETIME()
            FROM
               Deleted
      END
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-11-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-03-17
        • 2019-11-07
        相关资源
        最近更新 更多