sql >> Base de Datos >  >> RDS >> Sqlserver

Cómo devolver el valor de versión de fila actual para una base de datos de SQL Server (ejemplo de T-SQL)

Puede usar el @@DBTS función para obtener la rowversion actual de una base de datos dada en SQL Server. Más específicamente, devuelve el último uso versión de fila valor de la base de datos actual.

Ejemplo 1:uso básico

Para usar el @@DBTS función, simplemente selecciónela dentro de un SELECT declaración.

Así:

SELECT @@DBTS;

Resultado:

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

Ejemplo 2:diferentes bases de datos

Como se mencionó, la rowversion El valor es específico para cada base de datos. Por lo tanto, debe asegurarse de estar en la base de datos correcta.

Aquí hay un ejemplo para demostrarlo:

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

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

Resultado:

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

¿Dónde se usa este valor?

La versión de fila el valor lo usan las columnas que tienen una rowversion o marca de tiempo tipo de datos. Estas columnas se actualizan automáticamente con un número único, según el valor incrementado de rowversion , siempre que se produzca una inserción o actualización.

Usando el ejemplo anterior, si inserto o actualizo una fila en Music base de datos, y esa fila tiene una rowversion columna, el valor de esa columna probablemente se establecerá en 0x00000000000007D1 (es decir, 0x00000000000007D0 incrementado en 1). En esta etapa, si tuviera que usar @@DBTS contra esa base de datos, devolvería 0x00000000000007D1 (porque ese es el último recuento de filas utilizado valor).

Si luego actualizo esa fila, su rowversion la columna se convertirá en 0x00000000000007D2 . Esto es cierto, incluso si la operación de actualización en realidad no cambió ningún dato. Esta vez, si ejecuto @@DBTS devolvería 0x00000000000007D2 .

Para ver un ejemplo que demuestra esto, consulte ¿Qué es "rowversion" en SQL Server?

La marca de tiempo tipo de datos es en realidad un sinónimo de rowversion , por lo que el valor devuelto por @@DBTS refleja la rowversion actual valor si se incrementó en una rowversion columna o una marca de tiempo columna.

También tenga en cuenta que timestamp es uno de los cuatro tipos de datos obsoletos que se encuentran en modo de mantenimiento y pueden eliminarse en una versión futura de SQL Server. Por lo tanto, debe usar rowversion en lugar de marca de tiempo en obra nueva. También debe planear modificar las aplicaciones que actualmente usan timestamp .