Non voglio usare un numero intero, perché non voglio dover leggere il valore per incrementarlo.
UPDATE Table SET
IntColumn = IntColumn + 1
Mentre questo non tecnicamente richiede una lettura, non vedo alcun problema con esso.
Si può sempre e solo aggiornare allo stesso valore:
UPDATE Table SET
SomeColumn = SomeColumn
che attiverà aggiornamento rowversion pure.
AGGIUNTA: Si potrebbe fare una vista con la rowversion massima dei bambini:
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
Ma, no, non è possibile aggiornare direttamente una colonna rowversion (anche se si potrebbe implementare il proprio aggiornabile con @@ DBTS, binari (8) e INSTEAD OF trigger ...)
Potresti fornire esempi del tuo ultimo punto? Sembra promettente.
No, davvero non è così. ;) È troppo lavoro quando potresti semplicemente aggiornare allo stesso valore o usare una vista. Quelle sono le 2 opzioni più facili.
Ma, per essere completa, una colonna binaria (8) con un valore predefinito di @@ DBTS (che restituisce il numero di versione del database) e un trigger AFTER UPDATE che aggiorna anche la colonna binaria al nuovo @@ DBTS darti un tipo di psuedo-rowversion che puoi aggiornare manualmente. Non sarebbe più veloce o meglio dell'aggiornamento di qualche altra colonna allo stesso valore.
fonte
2010-01-29 21:40:02
datetime viene di solito utilizzato per LastModified columns..is questo qualcosa di diverso o può chiarire il motivo per cui non si desidera utilizzare un DateTime? – dan
Ho letto un articolo sul motivo per cui il tipo di dati DateTime non deve essere utilizzato per il controllo delle versioni e la concorrenza ottimistica. Non riesco a ricordare ogni dettaglio, ma aveva senso al momento. Credo che a causa della precisione del tipo di dati, gli aggiornamenti potrebbero teoricamente verificarsi nella stessa identica causa causando condizioni di gara. –
Solo se data/ora non viene fornita dal database: SQL Server DATETIMEs sono frazioni di secondo: http://msdn.microsoft.com/en-us/library/ms187819.aspx –