密码更改时如何触发sql触发器

时间:2014-12-26 11:50:14

标签: sql-server

我有一个包含id,user_Name和密码的表。我想创建一个触发器,当密码更改时将触发该触发器。

假设表格是:

create table reg
(
    id int identity(1,1) primary key,
    userName varchar(100),
    pass varchar(100)
)

我想将userName, password, changeDate保存到下表

create table regBackUp
(
    id int identity(1,1),
    regId foreign key references reg(id),
    oldPass varchar(100),
    changeDate date
)

4 个答案:

答案 0 :(得分:0)

嗯,您需要在after update表格上创建reg触发器。

在该触发器中,您需要写入从名为regBackUp的表中选择的表deleted
它是触发器中可用的特殊表,它将保存{{1}的值在更新之前的表。

有关reg表达式语法的参考,请参阅MSDN

答案 1 :(得分:0)

使用它。 TRIGGER

您可以从DELETED表格

中获取旧值
CREATE TRIGGER trgTest ON regFOR UPDATE
AS
BEGIN
    IF UPDATE(pass)
    BEGIN
        DECLARE @id AS INT
        DECLARE @pass AS varchar(100)

        SELECT @id = ID, @pass = pass FROM DELETED

        INSERT INTO regBackUp (regId, oldPass, changeDate) 
              VALUES (@id, @pass, GETDATE())
    END
END

答案 2 :(得分:0)

使用After Update TriggerUpdate()函数来确定列是否已更新。来自docs。

  

表示是否对指定进行了INSERT或UPDATE尝试   表或视图的列。 UPDATE()用于身体内的任何地方   一个Transact-SQL INSERT或UPDATE触发器来测试是否触发器   应该执行某些行动。

像这样创建一个After Update trigger

CREATE TRIGGER reg_pass_trg
ON reg
after UPDATE
AS
  BEGIN
      IF UPDATE(pass) --Works only when pass is mentioned in update statement
        INSERT INTO regBackUp
                    (regId,oldPass,changeDate)
        SELECT ID,pass,Getdate()
        FROM   deleted
  END 

答案 3 :(得分:0)

INSERT INTO namepassback 
            (username, 
             pass, 
             [date]) 
SELECT username, 
       pass, 
       Getdate() 
FROM   namepass 
WHERE  id = 1 

使用上面的查询,它将在不创建触发器的情况下工作