Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Şunlar için geçerlidir:SQL Server
Azure SQL Veritabanı
Azure SQL Yönetilen Örneği
Microsoft Fabric'te SQL veritabanı
Veritabanı içinde otomatik olarak oluşturulan benzersiz ikili sayıları kullanıma sunan bir veri türüdür. rowversion genellikle tablo satırlarını sürüm damgalama mekanizması olarak kullanılır. Depolama boyutu 8 bayttır. rowversion veri türü yalnızca artan bir sayıdır ve tarih veya saati korumaz. Tarih veya saat kaydetmek için datetime2 veri türünü kullanın.
Remarks
Her veritabanının, veritabanındaki bir rowversion sütunu içeren bir tabloda gerçekleştirilen her ekleme veya güncelleştirme işlemi için artımlı bir sayacı vardır. Bu sayaç, veritabanı rowversion'dır. Bu, bir saatle ilişkilendirilebilen gerçek bir saati değil, veritabanındaki göreli zamanı izler. Tabloda yalnızca bir rowversion sütunu olabilir.
rowversion sütunu olan bir satır her değiştirildiğinde veya eklendiğinde, artımlı veritabanı rowversion değeri rowversion sütununa eklenir. Bu özellik, rowversion sütununu anahtarlar, özellikle birincil anahtarlar için kötü bir aday yapar. Satırda yapılan tüm güncelleştirmeler rowversion değerini değiştirir ve bu nedenle anahtar değerini değiştirir. Sütun birincil anahtardaysa, eski anahtar değeri artık geçerli değildir ve eski değere başvuran yabancı anahtarlar artık geçerli değildir. Tabloya dinamik bir imleçte başvurulursa, tüm güncelleştirmeler imleçteki satırların konumunu değiştirir. Sütun bir dizin anahtarındaysa, veri satırında yapılan tüm güncelleştirmeler de dizinin güncelleştirmelerini oluşturur. Satır dönüştürme
zaman damgası, rowversion veri türünün eş anlamlısıdır ve veri türü eş anlamlılarının davranışına tabidir. DDL deyimlerinde, mümkün olduğunca zaman damgası yerine rowversion kullanın. Daha fazla bilgi için bkz. Veri Türü Eş Anlamlıları (Transact-SQL).
Transact-SQL zaman damgası veri türü, ISO standardında tanımlanan zaman damgası veri türünden farklıdır.
Note
zaman damgası söz dizimi kullanım dışıdır. Bu özellik, SQL Server'ın gelecek bir sürümünde kaldırılacaktır. Bu özelliği yeni geliştirme çalışmalarında kullanmaktan kaçının ve şu anda bu özelliği kullanan uygulamaları değiştirmeyi planlayın.
CREATE TABLE veya ALTER TABLE deyiminde, zaman damgası veri türü için bir sütun adı belirtmeniz gerekmez, örneğin:
CREATE TABLE ExampleTable (PriKey int PRIMARY KEY, timestamp);
Sütun adı belirtmezseniz, SQL Server Veritabanı Altyapısı zaman damgasını sütun adını oluşturur; ancak rowversion eş anlamlısı bu davranışı izlemez.
CREATE TABLE ExampleTable2 (PriKey int PRIMARY KEY, VerCol rowversion) ;
Note
Yinelenen rowversion değerleri, SELECT listesinde bir rowversion sütununun bulunduğu SELECT INTO deyimi kullanılarak oluşturulabilir. rowversion bu şekilde kullanılmasını önermeyiz.
Geçersiz rowversion sütunu, ikili (8) sütuna eşdeğerdir. Boş değer atanabilir rowversion sütunu, varbinary(8) sütununa benzer.
Bir satırın rowversion sütununu kullanarak bir güncelleştirme deyiminin son okunduktan sonra satıra karşı çalıştırılıp çalıştırılmadığını kolayca belirleyebilirsiniz. Satırda bir update deyimi çalıştırılırsa rowversion değeri güncelleştirilir. Satırda hiçbir güncelleştirme deyimi çalıştırılırsa, rowversion değeri daha önce okunan değerle aynıdır. Veritabanının geçerli rowversion değerini döndürmek için @@DBTSkullanın.
Birden çok kullanıcı satırları aynı anda güncelleştirirken veritabanının bütünlüğünü korumaya yardımcı olmak için tabloya bir rowversion sütunu ekleyebilirsiniz. Tabloyu yeniden sorgulamadan kaç satırın ve hangi satırların güncelleştirilmiş olduğunu da bilmek isteyebilirsiniz.
Örneğin, MyTestadlı bir tablo oluşturduğunuzu varsayalım. Aşağıdaki Transact-SQL deyimlerini çalıştırarak tablodaki bazı verileri doldurursunuz.
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
Ardından, güncelleştirme sırasında MyTest tablosunda iyimser eşzamanlılık denetimi uygulamak için aşağıdaki örnek Transact-SQL deyimlerini kullanabilirsiniz. Betik, satırı son okuduğunuzdaki <myRv> değerini göstermek için kullanır. değerini gerçek rowversion değeriyle değiştirin. Gerçek bir rowversion değeri örneği 0x00000000000007D3.
DECLARE @t TABLE (myKey int);
UPDATE MyTest
SET myValue = 2
OUTPUT inserted.myKey INTO @t(myKey)
WHERE myKey = 1
AND RV = <myRv>;
IF (SELECT COUNT(*) FROM @t) = 0
BEGIN
RAISERROR ('error changing row with myKey = %d'
,16 -- Severity.
,1 -- State
,1) -- myKey that was changed
END;
Örnek Transact-SQL deyimlerini bir işleme de yerleştirebilirsiniz. İşlem kapsamındaki @t değişkenini sorgulayarak, myKey tablosunu yeniden sorgulamadan tablonun güncelleştirilmiş MyTest sütununu alabilirsiniz.
Aşağıdaki örnekte zaman damgası söz dizimi kullanılır.
<myTS> değerini gerçek bir zaman damgasıile değiştirin.
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 = <myTS>;
IF (SELECT COUNT(*) FROM @t) = 0
BEGIN
RAISERROR ('error changing row with myKey = %d'
,16 -- Severity.
,1 -- State
,1) -- myKey that was changed
END;
Ayrıca bakınız
ALTER TABLE (Transact-SQL)
CAST ve CONVERT (Transact-SQL)
CREATE TABLE (Transact-SQL)
Veri Türleri (Transact-SQL)
DECLARE @local_variable (Transact-SQL)
SILME (Transact-SQL)
INSERT (Transact-SQL)
MIN_ACTIVE_ROWVERSION (Transact-SQL)
SET @local_variable (Transact-SQL)
GÜNCELLEME (Transact-SQL)