Cómo utilizar la columna de marca de hora de una tabla para el control de simultaneidad optimista en SQL Server 2005


INTRODUCCIÓN


La columna de marca de hora de una tabla puede utilizarse para determinar si cualquier valor en la fila de la tabla ha cambiado desde la última vez que se ha leído la tabla. Este artículo describe una manera de utilizar la columna de marca de hora de una tabla para el control de simultaneidad optimista en Microsoft SQL Server 2005.

Más información


Puede agregar una columna de marca de hora a una tabla para ayudar a mantener la integridad de la base de datos cuando varios usuarios están actualizando filas al mismo tiempo. También puede saber cuántas filas y las filas que se actualizaron sin volver a consultar la tabla.

Por ejemplo, suponga que crea una tabla que se denomina MyTest. Rellenar algunos datos de la tabla ejecutando las siguientes instrucciones de Transact-SQL.
CREATE TABLE MyTest (myKey int PRIMARY KEY, myValue int, TS timestamp)
GO
INSERT INTO MyTest (myKey, myValue) VALUES (1, 0)
GO
INSERT INTO MyTest (mykey, myValue) VALUES (2, 0)
GO
A continuación, puede utilizar las siguientes instrucciones de Transact-SQL de ejemplo para implementar el control de simultaneidad optimista en la tabla MyTest durante la actualización.
DECLARE @t TABLE (myKey int)
UPDATE MyTest SET myValue = 2
OUTPUT inserted.myKey into @t(myKey)
WHERE myKey = 1 and TS = TSValueIF (SELECT COUNT(*) FROM @t) = 0
BEGIN
RAISERROR ('error changing row with myKey = %d',
16, -- Severity.
1, -- State.
1) -- myKey that was changed
END
Nota: TSValue es el valor de la columna timestamp de la fila que indica la última vez que se lee la fila. Este valor debe reemplazarse por el valor real de marca de hora . Un ejemplo del valor real de marca de hora es 0x00000000000007D3.

También puede colocar las instrucciones de Transact-SQL de ejemplo en una transacción. Consultando la variable @t en el ámbito de la transacción, puede recuperar la columna actualizada myKey de la tabla sin volver a consultar la tabla MyTest .

Para obtener más información sobre el tipo de columna timestamp , visite el siguiente sitio Web de Microsoft Developer Network (MSDN):