Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
A következőkre vonatkozik:SQL Server
Azure SQL Database
Felügyelt Azure SQL-példány
SQL-adatbázis a Microsoft Fabricben
Olyan adattípus, amely az adatbázison belül automatikusan generált, egyedi bináris számokat tesz elérhetővé. sorfordítási általában a táblasorok verzióbélyegzési mechanizmusaként használják. A tárterület mérete 8 bájt. A rowversion adattípus csak egy növekvő szám, és nem őriz meg dátumot vagy időpontot. Dátum vagy idő rögzítéséhez használjon datetime2 adattípust.
Remarks
Minden adatbázis rendelkezik egy számlálóval, amely az adatbázison belüli rowversion oszlopot tartalmazó táblán végrehajtott minden beszúrási vagy frissítési művelethez növekszik. Ez a számláló az adatbázis sorverziója. Ez az adatbázis relatív idejét követi nyomon, nem pedig az órákhoz társítható tényleges időt. A táblák csak egy sorfordítási oszlopot tartalmazhatnak. Minden alkalommal, amikor egy sorfordítási oszlopot tartalmazó sort módosít vagy szúr be, a növekményes adatbázis-sorfordítási érték be lesz szúrva a rowversion oszlopba. Ez a tulajdonság a rowversion oszlopot a kulcsok, különösen az elsődleges kulcsok gyenge jelöltjeként teszi. A sor módosításai módosítják a sorfordítás értékét, ezért módosítják a kulcs értékét. Ha az oszlop elsődleges kulcsban van, a régi kulcs értéke már nem érvényes, és a régi értékre hivatkozó idegen kulcsok már nem érvényesek. Ha a táblázatra dinamikus kurzor hivatkozik, az összes frissítés megváltoztatja a kurzor sorainak pozícióját. Ha az oszlop indexkulcsban van, az adatsor összes frissítése is létrehozza az index frissítéseit. A sorverziós érték bármilyen frissítési utasítással növekszik, még akkor is, ha a sorértékek nem változnak. (Ha például egy oszlop értéke 5, és egy frissítési utasítás 5 értékre állítja az értéket, a művelet akkor is frissítésnek minősül, ha nincs változás, és a sorverziós növekszik.)
időbélyeg a sorverzió adattípus szinonimája, és az adattípus szinonimáinak viselkedése függ. A DDL-utasításokban lehetőség szerint
A Transact-SQL időbélyeg adattípus eltér az ISO-szabványban meghatározott időbélyeg adattípustól.
Note
A időbélyeg szintaxis elavult. Ez a funkció az SQL Server egy későbbi verziójában lesz eltávolítva. Ne használja ezt a funkciót az új fejlesztési munkában, és tervezze meg a funkciót jelenleg használó alkalmazások módosítását.
A CREATE TABLE vagy ALTER TABLE utasításban nem kell oszlopnevet megadnia a időbélyeg adattípushoz, például:
CREATE TABLE ExampleTable (PriKey int PRIMARY KEY, timestamp);
Ha nem ad meg oszlopnevet, az SQL Server adatbázismotorja létrehozza a időbélyeget oszlop nevét; a rowversion szinonimája azonban nem követi ezt a viselkedést. Ha rowversionhasznál, meg kell adnia egy oszlopnevet, például:
CREATE TABLE ExampleTable2 (PriKey int PRIMARY KEY, VerCol rowversion) ;
Note
Duplikált rowversion értékek a SELECT INTO utasítással hozhatók létre, amelyben egy rowversion oszlop szerepel a SELECT listában. Nem javasoljuk, hogy ilyen módon használja rowversion.
A nem rowversion oszlop szemantikailag egyenértékű egy bináris(8) oszloppal. A null értékű rowversion oszlop szemantikailag egyenértékű egy varbinary(8) oszlopával.
A sor rowversion oszlopával könnyen megállapíthatja, hogy egy frissítési utasítást futtattak-e a soron az utolsó olvasás óta. Ha egy frissítési utasítás fut a soron, a sorverzió értéke frissül. Ha nem futnak frissítési utasítások a soron, a sorverzió értéke megegyezik a korábban beolvasott értékkel. Az adatbázis aktuális rowversion-értékének visszaadásához használja a @@DBTS.
Egy rowversion oszlopot is hozzáadhat egy táblához, hogy megőrizze az adatbázis integritását, amikor egyszerre több felhasználó frissíti a sorokat. Azt is tudni szeretné, hogy hány sor és mely sorok frissültek a tábla ismételt lekérdezése nélkül.
Tegyük fel például, hogy egy MyTestnevű táblát hoz létre. Az alábbi Transact-SQL utasítások futtatásával feltölthet néhány adatot a táblában.
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
Ezután az alábbi Transact-SQL utasítások használatával optimista egyidejűségi vezérlőt implementálhat a MyTest táblában a frissítés során. A szkript 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;
A minta Transact-SQL utasítások tranzakcióba is helyezhetők. A @t változó lekérdezésével a tranzakció hatókörében lekérheti a tábla frissített myKey oszlopát a MyTest tábla újbóli lekérdezése nélkül.
Az alábbi példa a időbélyeg szintaxist használja. Cserélje le a <myTS> egy tényleges időbélyegre.
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;
Lásd még
ALTERNATÍV TÁBLÁZAT (Transact-SQL)
CAST és CONVERT (Transact-SQL)
CREATE TABLE (Transact-SQL)
adattípusok (Transact-SQL)
DECLARE @local_variable (Transact-SQL)
DELETE (Transact-SQL)
BEHELYEZKEDÉS (Transact-SQL)
MIN_ACTIVE_ROWVERSION (Transact-SQL)
SET @local_variable (Transact-SQL)
UPDATE (Transact-SQL)