Du kan bruge @@DBTS
funktion for at få den aktuelle rowversion af en given database i SQL Server. Mere specifikt returnerer den den sidst brugte rowversion værdien af den aktuelle database.
Eksempel 1 – Grundlæggende brug
For at bruge @@DBTS
funktion, skal du blot vælge den i en SELECT
erklæring.
Sådan:
SELECT @@DBTS;
Resultat:
+--------------------+ | (No column name) | |--------------------| | 0x0000000000000FA0 | +--------------------+
Eksempel 2 – Forskellige databaser
Som nævnt er rowversionen værdi er specifik for hver database. Derfor skal du sikre dig, at du er i den rigtige database.
Her er et eksempel til demonstration:
USE Music; SELECT @@DBTS AS "Music rowversion"; Use WideWorldImportersDW; SELECT @@DBTS AS "WideWorldImportersDW rowversion";
Resultat:
Changed database context to 'Music'. +--------------------+ | Music rowversion | |--------------------| | 0x00000000000007D0 | +--------------------+ (1 row affected) Changed database context to 'WideWorldImportersDW'. +-----------------------------------+ | WideWorldImportersDW rowversion | |-----------------------------------| | 0x0000000000015F90 | +-----------------------------------+ (1 row affected)
Hvor er denne værdi brugt?
rowversionen værdi bruges af kolonner, der enten har en rækkeversion eller tidsstempel datatype. Sådanne kolonner opdateres automatisk med et unikt nummer, baseret på den øgede værdi af rowversion , når der sker en indsættelse eller opdatering.
Ved at bruge ovenstående eksempel, hvis jeg indsætter eller opdaterer en række i Music
database, og den række har en rowversion kolonne, vil denne kolonnes værdi sandsynligvis blive sat til 0x00000000000007D1
(dvs. 0x00000000000007D0
øget med 1). På dette tidspunkt, hvis jeg skulle bruge @@DBTS
mod den database, ville den returnere 0x00000000000007D1
(fordi det er den sidst brugte rækketælling værdi).
Hvis jeg derefter opdaterer den række, er dens rowversion kolonne bliver 0x00000000000007D2
. Dette er sandt, selvom opdateringshandlingen faktisk ikke ændrede nogen data. Denne gang, hvis jeg kører @@DBTS
det ville returnere 0x00000000000007D2
.
For et eksempel, der viser dette, se Hvad er "rowversion" i SQL Server.
tidsstemplet datatype er faktisk et synonym for rowversion , så værdien returneret af @@DBTS
afspejler den aktuelle rækkeversion værdi, om den blev forøget med en rækkeversion kolonne eller et tidsstempel kolonne.
Bemærk også det tidsstempel er en af fire forældede datatyper, der er i vedligeholdelsestilstand og kan blive fjernet i en fremtidig version af SQL Server. Derfor bør du bruge rowversion i stedet for tidsstempel i nyt udviklingsarbejde. Du bør også planlægge at ændre applikationer, der i øjeblikket bruger tidsstempel .