Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

So geben Sie den aktuellen Zeilenversionswert für eine SQL Server-Datenbank zurück (T-SQL-Beispiel)

Sie können den @@DBTS verwenden Funktion, um die aktuelle Zeilenversion abzurufen einer bestimmten Datenbank in SQL Server. Genauer gesagt gibt es die zuletzt verwendete zurück Zeilenversion Wert der aktuellen Datenbank.

Beispiel 1 – Grundlegende Verwendung

Um den @@DBTS zu verwenden Funktion, wählen Sie diese einfach innerhalb eines SELECT aus Aussage.

So:

SELECT @@DBTS;

Ergebnis:

+--------------------+
| (No column name)   |
|--------------------|
| 0x0000000000000FA0 |
+--------------------+

Beispiel 2 – Unterschiedliche Datenbanken

Wie bereits erwähnt, die rowversion Der Wert ist für jede Datenbank spezifisch. Daher müssen Sie sicherstellen, dass Sie sich in der richtigen Datenbank befinden.

Hier ist ein Beispiel zur Veranschaulichung:

USE Music;
SELECT @@DBTS AS "Music rowversion";

Use WideWorldImportersDW;
SELECT @@DBTS AS "WideWorldImportersDW rowversion";

Ergebnis:

Changed database context to 'Music'.
+--------------------+
| Music rowversion   |
|--------------------|
| 0x00000000000007D0 |
+--------------------+
(1 row affected)
Changed database context to 'WideWorldImportersDW'.
+-----------------------------------+
| WideWorldImportersDW rowversion   |
|-----------------------------------|
| 0x0000000000015F90                |
+-----------------------------------+
(1 row affected)

Wo wird dieser Wert verwendet?

Die Zeilenversion value wird von Spalten verwendet, die entweder eine rowversion haben oder Zeitstempel Datentyp. Solche Spalten werden automatisch mit einer eindeutigen Nummer aktualisiert, basierend auf dem inkrementierten Wert von rowversion , wenn eine Einfügung oder Aktualisierung auftritt.

Verwenden Sie das obige Beispiel, wenn ich eine Zeile in Music einfüge oder aktualisiere Datenbank, und diese Zeile hat eine rowversion wird der Wert dieser Spalte wahrscheinlich auf 0x00000000000007D1 gesetzt (z. B. 0x00000000000007D0 um 1 erhöht). Wenn ich zu diesem Zeitpunkt @@DBTS verwenden würde gegen diese Datenbank würde es 0x00000000000007D1 zurückgeben (weil dies die zuletzt verwendete rowcount ist Wert).

Wenn ich dann diese Zeile aktualisiere, wird ihre rowversion Spalte wird zu 0x00000000000007D2 . Dies gilt auch dann, wenn der Aktualisierungsvorgang eigentlich keine Daten geändert hat. Diesmal, wenn ich @@DBTS ausführe es würde 0x00000000000007D2 zurückgeben .

Ein Beispiel, das dies demonstriert, finden Sie unter Was ist „rowversion“ in SQL Server.

Der Zeitstempel Datentyp ist eigentlich ein Synonym für rowversion , also der von @@DBTS zurückgegebene Wert spiegelt die aktuelle Zeilenversion wider Wert, ob er durch eine rowversion inkrementiert wurde Spalte oder ein Zeitstempel Säule.

Beachten Sie auch diesen Zeitstempel ist einer von vier veralteten Datentypen, die sich im Wartungsmodus befinden und möglicherweise in einer zukünftigen Version von SQL Server entfernt werden. Daher sollten Sie rowversion verwenden statt Zeitstempel bei Neuentwicklungen. Sie sollten auch planen, Anwendungen zu ändern, die derzeit timestamp verwenden .