⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 触发器.txt

📁 内含有触发器的使用说明和具体示例的代码.以调试可用.
💻 TXT
字号:
 /*
在触发器执行的时候,会产生两个临时表:inserted表和deleted表。它们的结构和触发器所在的表的结构相同,
SQL Server2005自动创建和管理这些表。可以使用这两个临时驻留内存的表测试某些数据修改的效果及设置触发
操作的条件,但不能直接对表中的数据进行更改。
deleted表用于存储insert和updeate语句所影响的行的副本。在执行delete或update语句时,行从触发器表中删除,
并传输到deleted表中,deleted表和触发器表通常没有相同的行。
inserted表用于存储insert和update语句所影响的行的副本。在一个插入或更新事务处理中,新建行被同时添加
到inserted表和触发器表中。inserted表中的行是触发器表中新行的副本。
在对具有触发器的表进行操作时,其操作过程如下:
(1)执行insert 操作,插入到触发器表中的新行被插入到inserted表中;
(2)执行deleted操作,从触发器表中删除的行被插入到deleted表中;
(3)执行updated操作,先从触发器表中删除旧行,然后再插入新行。其中被删除的旧行被插入到deleted表中。
插入的新行被插入到inserted表中。
*/
例18

  CREATE TRIGGER [insert1] ON [dbo].[teacher] 
  FOR INSERT, UPDATE 
  AS
    DECLARE @njob char(10),@nsal  numeric(9),@neno numeric(9)
    SET @njob = (SELECT job FROM Inserted)
    SET @nsal = (SELECT sal FROM Inserted)
    set  @neno=(select eno from inserted)
      IF @njob = '教授'   and  @nsal <4000
        begin
        update teacher
        set teacher.sal=4000
        where  eno=@neno
      end


 例19   /*建立日志文件Sal_log */
 
 CREATE TABLE teacher
        ( Eno    Char(4),
          Username  char(10),
          Ssex   char(3),
          Job char(10),
          Sal  NUMERIC(7,2)
         );


 CREATE TABLE Sal_log
        ( Eno    Char(4),
          Sal     NUMERIC(7,2),
          Username  char(10),
          User_action char(14),
          CDate   datetime
         );

       注意在做例19时,要删除例18中建的触发器,否则会引起冲突。
       
 /*当teacher表中的插入一条新记录时,自动在工资变化表中增加一条相应记录
    CREATE TRIGGER [insert_sal] ON [dbo].[teacher] 
    FOR INSERT
    AS
      DECLARE @peno numeric(9), @psal  numeric(9)
      SET @peno = (SELECT eno  FROM Inserted)
      SET @psal = (SELECT sal FROM Inserted)
      insert into sal_log values
      (@peno,   @psal,  current_user,'insert',current_timestamp)

 /*当teacher表中的工资发生变化后,自动在工资变化表中增加一条相应记录
  CREATE TRIGGER [update_sal] ON [dbo].[teacher] 
  after update
  AS
    DECLARE @peno numeric(9), @psal  numeric(9), @oldsal  numeric(9)
    SET @peno = (SELECT eno from inserted)
    SET @psal = (SELECT sal from inserted )
    set   @oldsal =(SELECT sal  from  deleted  )
      if  @psal <>@oldsal
      begin
      insert into sal_log values
      (@peno,   @oldsal,  current_user,'before_update',current_timestamp)
      insert into sal_log values
      (@peno,   @psal,  current_user,'after_update',current_timestamp)
    end
    
   /*当teacher表中的删除一条记录时,自动在工资变化表中增加一条相应记录
    CREATE TRIGGER [delete_sal] ON [dbo].[teacher] 
    FOR delete
    AS
      DECLARE @peno numeric(9), @psal  numeric(9)
      SET @peno = (SELECT eno  FROM deleted)
      SET @psal = (SELECT sal FROM deleted)
      insert into sal_log values
      (@peno,   @psal,  current_user,'delete',current_timestamp) 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -