2014-12-26 123 views
0

我有一個包含id,user_Name和password的表。我想創建觸發器,當密碼更改時將觸發。如何在密碼更改時觸發sql觸發器

假設表爲:

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 
) 

回答

0

那麼,你需要在reg表中創建觸發器after update

在該觸發器中,您需要寫入表regBackUp從表deleted中選擇的記錄。
這是觸發器中可用的特殊表格,它將在更新前保留reg表的值。

有關create trigger表達式的語法的參考,請參閱MSDN

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 
0

使用得到舊值與Update()功能找出列是否更新或沒有。從文檔。

指示是否對錶或視圖的指定 列執行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 
0
INSERT INTO namepassback 
      (username, 
      pass, 
      [date]) 
SELECT username, 
     pass, 
     Getdate() 
FROM namepass 
WHERE id = 1 

使用上面的查詢,將工作一樣,而無需創建觸發器

+1

這種「解決方案」,它完全無關你的問題。例如,它總是選擇'id = 1'的記錄 - 並且不檢查是否更新。 –

+0

你的答案根本沒有任何意義,你在哪裏檢查「傳遞」列是**更新**還是不總是'Id = 1' –