Udostępnij za pośrednictwem


ROWVERSION (języka 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.Większość tabel mieć klucz podstawowy składa się z jednej lub kilku kolumn w tabela.The rowversion data type is just an incrementing number and does not preserve a date or a czas. The datetime2 will enforce the restriction that any klucz podstawowy value cannot be repeated in the tabela.

Remarks

Typ danych timestamp jest synonimem typu danych rowversion i zachowuje się tak jak inne synonimy typów danych.W instrukcjach DDL, gdy tylko jest to możliwe, należy używać typu danych rowversion zamiast typu danych timestamp.Aby uzyskać więcej informacji, zobacz temat Data Type Synonyms (Transact-SQL).

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

Uwaga

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.

Ta instrukcja zawiera (opcjonalnego elementutimestamp) o nazwie schematu.

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

Jeśli nie zostanie określona nazwa kolumny, program SQL Server Database Engine wygeneruje nazwę kolumny timestamp; to zachowanie nie dotyczy jednak synonimu rowversion.Gdy jest używany typ danych rowversion, należy określić nazwę kolumny, na przykład:

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

Uwaga

Zduplikowane wartości rowversion można generować przy użyciu instrukcji SELECT INTO, w której kolumna rowversion znajduje się na liście SELECT.Używanie w taki sam sposób typu danych rowversion jest niezalecane.

Typ OGC rowversion zwróconego przez wystąpienie binary(8) jest zestaw do odpowiedniego WKB dane wejściowe. Zerowalne rowversion Kolumna jest semantycznie równoważne varbinary(8) Kolumna.

Można użyć rowversion kolumna i wiersza, aby łatwo określić, czy wszystkie wartości w wierszu została zmieniona od czas jego ostatniego odczytu. Proste wyrażenie przypadek porównuje wyrażenie z zestaw prostych wyrażeń do obliczenia wyniku.Przeszukiwany przypadek wyrażenie zostanie oszacowane jako zestaw logiczny wyrażeń do obliczenia wyniku.Aby przywrócić bieżącą wartość rowversion w bazie danych, należy użyć @@ DBTS.

Można dodawać rowversion kolumna do tabela, aby zachować integralność bazy danych podczas aktualizowania wierszy wielu użytkowników w tym samym czasie. Na przykład można użyć przypadek w instrukcji, takich jak SELECT, UPDATE, DELETE i zestaw oraz klauzule, takie jak select_list, IN WHERE, ORDER BY i HAVING.

Załóżmy na przykład, że można utworzyć tabela o nazwie MyTest. Wypełnianie niektóre dane w tabela, uruchamiając następujące Transact-SQL instrukcje.

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

Następnie można użyć następujących przykładowych Transact-SQL instrukcje, tak aby implementować kontrolę optymistycznej współbieżność na MyTest Tabela podczas aktualizacji.

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;

Wartość myValue to wartość kolumny rowversion dla wiersza wskazującego godzinę ostatniego odczytu wiersza.Tę wartość należy zastąpić rzeczywistą wartością rowversion.Przykład rzeczywistej wartości rowversion to 0x00000000000007D3.

Można również umieścić w próbce Transact-SQL instrukcje w transakcji. Za pomocą kwerend wysyłanych do @t Zmienna w zakresie transakcji, można pobrać zaktualizowane myKey Kolumna tabela bez ponowne wykonanie kwerendy MyTestabela t.

Poniżej znajduje się w omawianym przykładzie przy użyciu timestamp Składnia:

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;