No quiero usar un número entero, porque no quiero tener que leer el valor para incrementarlo.
UPDATE Table SET
IntColumn = IntColumn + 1
Mientras eso técnicamente requieren una lectura, no veo ningún problema con ella.
siempre se puede simplemente actualizar al mismo valor:
UPDATE Table SET
SomeColumn = SomeColumn
que activará la actualización rowversion también.
ADEMÁS: Se podría hacer una vista con el rowversion máxima de los niños:
SELECT Parent.*, MaxChildRowVersion as ChildVersion
FROM Parent
JOIN (
SELECT ParentId, MAX(RowVersion) as MaxChildRowVersion
FROM Child
GROUP BY ParentId
) as Child ON
Parent.ParentId = Child.ParentId
Pero, no, no se puede actualizar directamente a una columna rowversion (aunque se puede implementar su propio actualizable con @@ DBTS, disparadores binarios (8) y INSTEAD OF ...)
¿Podría dar ejemplos de su último punto? Suena prometedor
No, realmente no es así. ;) Es demasiado trabajo cuando podrías actualizar al mismo valor en su lugar o usar una vista. Esas son las 2 opciones más fáciles.
Pero, para completar, una columna binaria (8) con un valor predeterminado de @@ DBTS (que devuelve el número de versión de la base de datos) y un activador DESPUÉS ACTUALIZAR que también actualiza la columna binaria al nuevo @@ DBTS darle un tipo de inversión de secuencia de comandos que luego puede actualizar manualmente. Sin embargo, no sería más rápido o mejor que simplemente actualizar alguna otra columna a su mismo valor.
DateTime por lo general se utiliza para LastModified columns..is este algo diferente o se puede aclarar por qué usted no desea utilizar un DateTime? – dan
Leí un artículo sobre por qué el tipo de datos DateTime no se debe usar para el control de versiones y la concurrencia optimista. No recuerdo todos los detalles, pero tenía sentido en ese momento. Creo que fue debido a la precisión del tipo de datos, las actualizaciones podrían ocurrir teóricamente en la misma instancia que causa las condiciones de carrera. –
Solo si la fecha/hora no es proporcionada por la base de datos - DATETIMEs de SQL Server son en fracciones de segundo: http://msdn.microsoft.com/en-us/library/ms187819.aspx –