Re: Triggers und History
- From: "Günter Prossliner" <nospam@xxxxxxxx>
- Date: Fri, 17 Apr 2009 14:42:44 +0200
Hallo Albert!
Wir haben uns schon richtig verstanden. Hier was ich habe:
...
Es geht schon. Im Endeffekt kannst Du alles was Du schreiben kannst auch
generieren.
Sobald Du allerdings auf Feld-Ebene tracen willst, musst Du mittels eines
CURSORs durch die Rows in den INSERTED bzw. DELETE Tabellen gehen.
Überlege Dir zuerst wie das fertige Statement aussehen soll
z.b.:
CREATE TRIGGER <TableName>_History_Insert ON [<TableName>]
AFTER INSERT
AS
### dynamically generate a variable for each column { ###
DECLARE @i_Id int
DECLARE @i_Name varchar(max)
DECLARE @i_Status int
### } ###
DECLARE @HistoryId int
DECLARE C CURSOR FOR
SELECT Id, Name, Status FROM INSERTED
OPEN C
### dynamically generate the list of variables
FETCH NEXT FROM C INTO @i_Id, @i_Name, @i_Status
WHILE @@FETCH_STATUS = 0 BEGIN
-- insert the main entry
INSERT INTO History (TableName, RecordId, Operation)
VALUES ('<TableName>', @i_Id, 'I')
SET @HistoryId = @@IDENTITY
### dynamically generate such a block for each column { ###
-- insert the details (one statement for each field)
INSERT INTO HistoryDetails (HistoryId, FieldName, OldValue, NewValue)
SELECT @HistoryId, 'Id', NULL, @i_Id
INSERT INTO HistoryDetails (HistoryId, FieldName, OldValue, NewValue)
SELECT @HistoryId, 'Name', NULL, @i_Name
INSERT INTO HistoryDetails (HistoryId, FieldName, OldValue, NewValue)
SELECT @HistoryId, 'Status', NULL, @i_Status
### } ###
### dynamically generate the list of variables
FETCH NEXT FROM C INTO @i_Id, @i_Name, @i_Status
END
CLOSE C
DEALLOCATE C
===
Für den UPDATE Trigger musst Du die INSERTED und DELETED joinen und jeweils
unterschiedliche Variablen dafür haben, im Block vergleichst Du diese dann:
IF(@i_Name <> @d_Name)
INSERT INTO HistoryDetails (HistoryId, FieldName, OldValue, NewValue)
SELECT @HistoryId, 'Name', @d_Name, @i_Name
OK?
mfg GP
.
- References:
- Triggers und History
- From: Albert Andersson
- Re: Triggers und History
- From: Albert Andersson
- Re: Triggers und History
- From: Günter Prossliner
- Re: Triggers und History
- From: Albert Andersson
- Re: Triggers und History
- From: Albert Andersson
- Re: Triggers und History
- From: Günter Prossliner
- Re: Triggers und History
- From: Albert Andersson
- Re: Triggers und History
- From: Günter Prossliner
- Triggers und History
- Prev by Date: Re: DataTable formatieren
- Next by Date: Re: Triggers und History
- Previous by thread: Re: Triggers und History
- Next by thread: Re: Triggers und History
- Index(es):
Relevant Pages
|