rowVersion (Transact-SQL)

Is a data type that exposes automatically generated, unique binary numbers within a database.rowversion is generally used as a mechanism for version-stamping table rows.Depolama 8 bayt boyutudur.The rowversion data type is just an incrementing number and does not preserve a tarih or a saat. Bir tarih veya saat kaydetmek için , kullanan bir datetime2 Veri Türü.

Remarks

Her veritabanı için her ekleme artırılır sayacı ya da üzerinde gerçekleştirilen güncelleştirme işlemi olan bir tablo içeren bir rowversion veritabanındaki sütun. Bu veritabanı rowversion sayacıdır.Bu, bir göreli saati, veritabanı içinde bir saat ile ilişkilendirilebilecek değil bir fiili izler.Bir tablonun yalnızca bir tane olabilir rowversion sütun. Her saat, bir satır içeren bir rowversion sütun eklendiğinde veya değiştirildiğinde, artan veritabanı rowversion değeri eklenir rowversion sütun. Bu özellik yapan bir rowversion kötü bir aday anahtarlarının, özellikle birincil anahtar sütun. Satır için yaptığınız güncelleştirmeler rowversion değeri değişir ve bu nedenle, anahtar değerini değiştirir.Sütun bir birincil anahtarda, eski anahtar değeri artık geçerli değil ve yabancı anahtarlar için eski değeri başvuru artık geçerli değil.Tablo devingen imleç içinde başvurulan tüm güncelleştirmelerin satırları imleç konumunu değiştirin.Sütun için bir dizin anahtar ise, veri satırı için tüm güncelleştirmeleri, dizin güncelleştirmeleri de oluşturur.

timestamp için eş olan rowversion verileri yazın ve bu verilerin konu türü eşanlamlıları davranıştır. DDL ifadeleri kullanma rowversion yerine timestamp mümkün olan her yerde. Daha fazla bilgi için bkz:Veri türü eşanlamlılar (Transact-SQL).

The Transact-SQLtimestamp data type is different from the timestamp data type defined in the ISO standard.

Not

The timestamp syntax is deprecated.This feature will be removed in a future version of Microsoft SQL Server. Avoid using this feature in new development work, and plan to modify applications that currently use this feature.

Bir tablo, CREATE veya ALTER tablo deyiminde için bir sütun adı belirtmeniz gerekmez timestamp Veri, örneğin şunu yazın:

CREATE TABLE ExampleTable (PriKey int PRIMARY KEY, timestamp);

Bir sütun adı belirtmezseniz, SQL Server Database Engine oluşturur timestamp sütun adı; ancak, rowversion Bu davranış, veri türünün eşanlamlısı izlemez. Kullandığınızda rowversion, örneğin bir sütun adı belirtmeniz gerekir:

CREATE TABLE ExampleTable2 (PriKey int PRIMARY KEY, VerCol rowversion) ;

Not

Çoğaltma rowversion değerleri, SELECT INTO deyim kullanılarak oluşturulabilir bir rowversion SELECT listesinde sütundur. Kullanma önerilmez rowversion Bu şekilde.

Bir nonnullable rowversion sütun semantically eşdeğeri olan bir binary(8) sütun. Bir null rowversion sütun semantically eşdeğeri olan bir varbinary(8) sütun.

Kullanabileceğiniz rowversion kolayca satırdaki herhangi bir değer son bu yana değişip değişmediğini belirlemek için bir satır, sütun saat iletiyi okuyabilir. Satır için herhangi bir değişiklik yaptıysanız, rowversion değeri güncelleştirildi.Satıra hiçbir değişiklik yapılırsa, rowversion ne zaman, önceden okundu aynı değerdir.Bir veritabanı için geçerli rowversion değeri döndürmek için kullanın. @@ dbts.

Ekleyebileceğiniz bir rowversion birden çok kullanıcının aynı satır güncelleştirilirken veritabanının bütünlüğünü sağlamak için tabloya sütun saat. Kaç satır ve hangi satırların tablo re-querying olmadan güncelleştirildi bilmek isteyebilirsiniz.

Örneğin, adlı bir tablo oluşturmak varsayalım. MyTest. Bazı verileri doldurmak tablo aşağıdaki çalıştırarak. Transact-SQL ifadeler.

CREATE TABLE MyTest (myKey int PRIMARY KEY
    ,myValue int, RV rowversion);
GO 
INSERT INTO MyTest (myKey, myValue) VALUES (1, 0);
GO 
INSERT INTO MyTest (myKey, myValue) VALUES (2, 0);
GO

Aşağıdaki örnek daha sonra kullanabilirsiniz Transact-SQL iyimser eşzamanlılık denetimi uygulamak ifadeleri MyTest tablo Güncelleştirme sırasında.

DECLARE @t TABLE (myKey int);
UPDATE MyTest
SET myValue = 2
    OUTPUT inserted.myKey INTO @t(myKey) 
WHERE myKey = 1 
    AND RV = myValue;
IF (SELECT COUNT(*) FROM @t) = 0
    BEGIN
        RAISERROR ('error changing row with myKey = %d'
            ,16 -- Severity.
            ,1 -- State 
            ,1) -- myKey that was changed 
    END;

myValue olan rowversion Son satır okuma gösteren satır, sütun değeri. Bu değeri fiili değiştirilmeleri gerekir rowversion Değer. Fiili örneği rowversion 0x00000000000007D3 değerdir.

Ayrıca örnek koy Transact-SQL bir hareket halinde deyimleri. Sorgulamak @t değişken hareket kapsamında, güncelleştirilmiş alabilirsiniz myKey Sütun tablonun requerying olmadan MyTest tablosudur.

Aşağıda aynı örnek verilmektedir kullanarak timestamp Sözdizimi:

CREATE TABLE MyTest2 (myKey int PRIMARY KEY
    ,myValue int, TS timestamp);
GO 
INSERT INTO MyTest2 (myKey, myValue) VALUES (1, 0);
GO 
INSERT INTO MyTest2 (myKey, myValue) VALUES (2, 0);
GO
DECLARE @t TABLE (myKey int);
UPDATE MyTest2
SET myValue = 2
    OUTPUT inserted.myKey INTO @t(myKey) 
WHERE myKey = 1 
    AND TS = myValue;
IF (SELECT COUNT(*) FROM @t) = 0
    BEGIN
        RAISERROR ('error changing row with myKey = %d'
            ,16 -- Severity.
            ,1 -- State 
            ,1) -- myKey that was changed 
    END;