Ich bin mit dem gleichen Problem konfrontiert hier Building a snapshot table from audit records. Der Code bellow teilweise mein ProblemErstellen von Snapshot-Tabelle von Audit-Trail in ms sql
Select * into #temp from (
SELECT Audit.PrimaryKeyValue as ID,Audit.FieldName,OldValue FROM audit left JOIN (
SELECT Audit.FieldName,Audit.PrimaryKeyValue, MAX(UpdateDate) AS dateadded FROM audit GROUP BY FieldName,PrimaryKeyValue
) maxtimestamp ON audit.FieldName = maxtimestamp.FieldName AND audit.updateDate = maxtimestamp.dateadded
where PrimaryKeyField='Id' and cast(UpdateDate as date)<[email protected]) src
pivot(
max(src.OldValue)
for FieldName in (Centrala,ID_Grup,Pi, Ci, Pmt, Pneta, Rpp, Pd, UD, Suport1, Suport2, Suport3, Stare,
Motiv, Observatii, Comentarii, Un, Data_ADD, Modified_Date, Scada, Fuel_base)
) piv;
lösen Wie eine Momentaufnahme einer Tabelle auf Aufzeichnungen von Audit-Trail-Tabelle zu einem bestimmten Zeitpunkt zu erhalten, basierend. Durch Kopieren der tatsächlichen Tabelle in eine temporäre und durch Aktualisieren von Werten aus diesem basierend auf dem Inhalt der Prüfung ist eine Lösung? Mein Englisch ist arm! Danke !!!
Die Struktur der Primärtabelle ist:
[ID] [int] IDENTITY(1,1) NOT NULL,
[Centrala] [int] NOT NULL,
[ID_grup] [nvarchar](50) NULL,
[Pi] [float] NULL,
[Ci] [float] NULL,
[Pmt] [float] NULL,
[Pneta] [float] NULL,
[Rpp] [float] NULL,
[Pd] [float] NULL,
[UD] [nvarchar](50) NULL,
[Suport1] [nvarchar](255) NULL,
[Suport2] [nvarchar](255) NULL,
[Suport3] [nvarchar](255) NULL,
[Stare] [int] NULL,
[Motiv] [nvarchar](max) NULL,
[Observatii] [nvarchar](max) NULL,
[Comentarii] [nvarchar](max) NULL,
[Un] [varchar](10) NULL,
[Data_ADD] [date] NULL,
[Modified_Date] [date] NULL,
[Scada] [nvarchar](100) NULL,
[Fuel_base] [nvarchar](255) NULL,
und die Struktur der Audit-Tabelle ist:
[AuditID] [int] IDENTITY(1,1) NOT NULL,
[Type] [char](1) NULL,
[TableName] [varchar](128) NULL,
[PrimaryKeyField] [varchar](1000) NULL,
[PrimaryKeyValue] [varchar](1000) NULL,
[FieldName] [varchar](128) NULL,
[OldValue] [varchar](1000) NULL,
[NewValue] [varchar](1000) NULL,
[UpdateDate] [datetime] NULL,
[UserName] [varchar](128) NULL
Benutzer können Werte in Primärtabelle inklusive Löschen von ganzen Zeilen und Audit-Tabelle Fang ändern alle Änderungen.Ich muss einen Bericht mit Inhalt der primären Tabelle zu einem bestimmten Zeitpunkt in der Zeit machen. Ich denke, der Name der Spalte in der Audit-Tabelle ist aussagekräftig, Type hat drei Werte 'U', 'I', 'D' für Update, Einfügen und Löschen von Aktionen. Ein weiteres Problem ist, dass, wenn die Audit-Tabelle Änderungen für Zeilen in der primären Tabelle enthält und das Datum für den Snapshot niedriger ist als updateDate in Audit, dann muss ich OldValue else NewValue wählen. Das ist richtig? Danke @ Nick.McDeermaid für Ihre Antwort !!
Möchten Sie immer die neueste Ansicht der Tabelle sehen oder müssen Sie sie zu jeder Zeit sehen können? Sie müssen nur die Audit-Zeilen auf den ursprünglichen Datensatz anwenden. Wirst du deinen Schnappschuss in einer speziellen Tabelle erstellen? Bitte poste es DDL –