use*_*875 38 sql t-sql sql-server-2008
我需要在SQL Server 2008中创建触发器,从一行中插入所有值,其中一些值已更改为Log表!
例如,如果我有表的Employees具有列id,名称,密码,并且我更新此表并为列名插入新值,那么我需要在表Log中更新表中Employees之后的值.
我怎么能这样做?谢谢!
mar*_*c_s 91
在触发器中,您有两个可用的伪表,Inserted并且Deleted包含这些值.
在UPDATE的情况下,Deleted表将包含旧值,而Inserted表包含新值.
因此,如果您想要记录ID, OldValue, NewValue触发器,则需要编写如下内容:
CREATE TRIGGER trgEmployeeUpdate
ON dbo.Employees AFTER UPDATE
AS
INSERT INTO dbo.LogTable(ID, OldValue, NewValue)
SELECT i.ID, d.Name, i.Name
FROM Inserted i
INNER JOIN Deleted d ON i.ID = d.ID
Run Code Online (Sandbox Code Playgroud)
基本上,你加入Inserted和Deleted伪表,抓取ID(在两种情况下都是相同的,我认为),Deleted表中的旧值,表中的新值Inserted,以及将所有内容存储在LogTable
And*_*mar 38
这是一个示例更新触发器:
create table Employees (id int identity, Name varchar(50), Password varchar(50))
create table Log (id int identity, EmployeeId int, LogDate datetime,
OldName varchar(50))
go
create trigger Employees_Trigger_Update on Employees
after update
as
insert into Log (EmployeeId, LogDate, OldName)
select id, getdate(), name
from deleted
go
insert into Employees (Name, Password) values ('Zaphoid', '6')
insert into Employees (Name, Password) values ('Beeblebox', '7')
update Employees set Name = 'Ford' where id = 1
select * from Log
Run Code Online (Sandbox Code Playgroud)
这将打印:
id EmployeeId LogDate OldName
1 1 2010-07-05 20:11:54.127 Zaphoid
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
104788 次 |
| 最近记录: |