Protokollieren temporäre Tabellen Änderungen, wenn keine vorhanden sind?

7

Leider habe ich keinen direkten Zugriff auf eine SQL 2016-Instanz, um dies zu testen. Wenn ich eine Zeittabelle mit folgendem Schema hätte:

create table blah (
    foo int identity(1,1),
    baa int
)

und ich sollte die folgende Aussage machen:

update blah set baa = baa

Würde es Änderungen protokollieren, als hätte ich tatsächlich Daten aktualisiert?

Ich habe mich im MSDN-Artikel nach temporären Tabellen und im Artikel zum Ändern von Daten umgesehen , kann dort jedoch nichts finden, was dies spezifiziert.

Jeff
quelle

Antworten:

9

Meinen Kommentar in eine Antwort umwandeln ..

Wenn der Wert tatsächlich aktualisiert wird, werden Änderungen protokolliert. Wenn Sie denselben Wert aktualisieren, werden neue Versionen für jede Zeile aufgezeichnet, die Spaltenwerte bleiben jedoch gleich.

Unten ist das Arbeitsbeispiel:

CREATE TABLE dbo.blah1
    -- PK is a requirement !!
    (
    foo INT identity(1, 1) PRIMARY KEY
    ,baa INT
    ,SysStartTime DATETIME2 GENERATED ALWAYS AS ROW START NOT NULL
    ,SysEndTime DATETIME2 GENERATED ALWAYS AS ROW END NOT NULL
    ,PERIOD FOR SYSTEM_TIME(SysStartTime, SysEndTime)
    )
    WITH (SYSTEM_VERSIONING = ON);

-- insert data
insert into dbo.blah (baa)
values (1)

Überprüfen Sie nun die Daten

-- check data
    SELECT * FROM  dbo.blah;
    select * from [dbo].[MSSQL_TemporalHistoryFor_629577281]

Geben Sie hier die Bildbeschreibung ein

Dummy-Update durchführen

update blah 
set baa = baa

Geben Sie hier die Bildbeschreibung ein

Führen Sie eine weitere Dummy-Aktualisierung durch. Es gibt Zeilen mit denselben Werten, aber unterschiedlichen Systemzeiten - Start und Ende.

Geben Sie hier die Bildbeschreibung ein

Sie müssen über einen geeigneten Mechanismus verfügen, um die Verlaufstabelle zu bereinigen, da diese erheblich größer werden kann, wenn Sie vergessen, sie zu kürzen.

Kin Shah
quelle
1
Was die Bereinigung angeht - Sie denken, eine dynamische Abfrage über alle Tabellen hinweg wäre gut? Möchten Sie auch dann nicht die Haupttabelle ändern, damit das Startdatum auf den frühesten Zeitpunkt zurückgeht? Und dann möchten Sie diese Datensätze in der Verlaufstabelle entfernen.
Anthony Genovese