【发布时间】:2017-10-08 11:41:23
【问题描述】:
我需要执行“更新触发器”以将表位置的更改插入到审计表中。
我知道如何访问插入/删除的新值和旧值,但我似乎无法找到我需要做什么来获取已更新的不同列。(我知道光标使用等)
这里是我目前得到的代码(抱歉是法语)
ALTER TRIGGER T_U_Locations ON Locations
FOR UPDATE
AS
BEGIN
--Definition des valeurs
DECLARE @tempDuChangement VARCHAR(30);
DECLARE @nomDuChampChange VARCHAR(64);
DECLARE @idLocation INT;
DECLARE @ancienneV VARCHAR(50);
DECLARE @nouvelleV VARCHAR(50);
DECLARE @raison VARCHAR(50);
--Aquisition des valeurs sur les changement apportés
SET @tempDuChangement = CONVERT( VARCHAR(30) , CURRENT_TIMESTAMP );
SET @nomDuChampChange = --HERE GOES THE CURRENT UPDATED COLUMN
SET @idLocation = (SELECT inserted.id FROM inserted);
SET @ancienneV = (SELECT /*HERE GOES THE CURRENT UPDATED COLUMN*/ FROM deleted);
SET @nouvelleV = (SELECT /*HERE GOES THE CURRENT UPDATED COLUMN*/ FROM inserted);
-- Crée une nouvelle entré dans la table Audits avec les information relative
INSERT INTO Audits
VALUES
(
@tempDuChangement,
@nomDuChampChange,
@ancienneV,
@nouvelleV,
@idLocation,
'raison test'
)
END
【问题讨论】:
-
inserted和deleted是表,因此它们可以表示集合操作的结果。假设触发器总是只处理一行,而设计触发器通常是一个糟糕的计划。如果您绝对确定不会超过一排,那么请添加对行数的检查,并使用RaIsError或Throw明确告知稍后来的人他们有试图执行不可接受的语句。 (if ( select Count(*) from inserted ) > 1 RaIsError( 'FooTable_Insert: No more than one row may be processed.', 25, 42 ) with log)
标签: sql-server tsql triggers