Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

Как да върнете текущата стойност на версия на реда за база данни на SQL Server (пример за T-SQL)

Можете да използвате @@DBTS функция, за да получите текущата версия на реда на дадена база данни в SQL Server. По-конкретно, връща последно използвано версия на ред стойност на текущата база данни.

Пример 1 – Основна употреба

За да използвате @@DBTS функция, просто я изберете в SELECT изявление.

Като това:

SELECT @@DBTS;

Резултат:

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

Пример 2 – Различни бази данни

Както споменахме, версията на ред стойността е специфична за всяка база данни. Следователно, трябва да се уверите, че сте в правилната база данни.

Ето пример за демонстрация:

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

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

Резултат:

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

Къде се използва тази стойност?

Версията row стойност се използва от колони, които имат или версия на ред или клеймо за време тип данни. Такива колони автоматично се актуализират с уникален номер въз основа на увеличената стойност на rowversion , когато се случи вмъкване или актуализация.

Използвайки горния пример, ако вмъкна или актуализирам ред в Music база данни и този ред има версия на ред колона, стойността на тази колона вероятно ще бъде зададена на 0x00000000000007D1 (т.е. 0x00000000000007D0 увеличено с 1). На този етап, ако трябваше да използвам @@DBTS срещу тази база данни, той ще върне 0x00000000000007D1 (защото това е последният използван брой редове стойност).

Ако след това актуализирам този ред, неговата версия на ред колоната ще стане 0x00000000000007D2 . Това е вярно, дори ако операцията за актуализиране всъщност не промени никакви данни. Този път, ако стартирам @@DBTS ще върне 0x00000000000007D2 .

За пример, който демонстрира това, вижте Какво е „версия на реда“ в SQL Server.

клеймото за време типът данни всъщност е синоним на версия на ред , така че стойността, върната от @@DBTS отразява текущата версия на ред стойност дали е увеличена с версия на ред колона или клеймо за време колона.

Също така имайте предвид, че timestamp е един от четирите остарели типа данни, които са в режим на поддръжка и може да бъдат премахнати в бъдеща версия на SQL Server. Ето защо трябва да използвате rowversion вместо timestamp в нови разработки. Трябва също да планирате да модифицирате приложения, които в момента използват timestamp .


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Дизайн на база данни:една огромна таблица или отделни таблици?

  2. 5 трика за осигуряване на максимална производителност на SQL Server

  3. Трябва ли да се декларира скаларна променлива @Id?

  4. Как да добавите ИЛИ пуснете колона от таблица с активиран CDC, без да губите данни в базата данни на SQL Server - урок за SQL Server

  5. Заявка за блокиране на SQL Server