Big*_*lls 41 sql database sql-server triggers sql-server-express
我正在使用Sqlserver express而且我无法做before updated
触发器.还有另外一种方法吗?
小智 35
确实,MSSQL中没有"before triggers".但是,您仍然可以通过一起使用"inserted"和"deleted"表来跟踪对表进行的更改.当更新导致触发器触发时,"inserted"表存储新值,"deleted"表存储旧值.获得此信息后,您可以相对轻松地模拟"触发前"行为.
Cha*_*ynt 10
无法确定这是否适用于SQL Server Express,但即使您的触发器在更新后发生,您仍然可以访问"之前"数据.您需要从更改表时动态创建的已删除或已插入表中读取数据.这基本上就是@Stamen所说的,但我还需要进一步探索,以了解(有用!)的答案.
在删除过程中DELETE和UPDATE语句受影响的行的表存储副本.在执行DELETE或UPDATE语句期间,将从触发器表中删除行并将其传输到已删除的表...
在插入过程中INSERT和UPDATE语句受影响的行的表存储副本.在插入或更新事务期间,新行将添加到插入的表和触发器表中...
因此,您可以创建触发器以从其中一个表中读取数据,例如
CREATE TRIGGER <TriggerName> ON <TableName>
AFTER UPDATE
AS
BEGIN
INSERT INTO <HistoryTable> ( <columns...>, DateChanged )
SELECT <columns...>, getdate()
FROM deleted;
END;
Run Code Online (Sandbox Code Playgroud)
我的例子基于这里的一个: