我有一个包含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
)
答案 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 Trigger
和Update()函数来确定列是否已更新。来自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
使用上面的查询,它将在不创建触发器的情况下工作