versão de linha (Transact-SQL)
Aplica-se a:SQL Server
Banco de Dados SQL do Azure
Instância Gerenciada SQL do Azure
banco de dados SQL no Microsoft Fabric
É um tipo de dados que expõe números binários exclusivos gerados automaticamente dentro de um banco de dados. de versão de linha é geralmente usado como um mecanismo para carimbar as linhas da tabela. O tamanho do armazenamento é de 8 bytes. O rowversion tipo de dados é apenas um número de incremento e não preserva uma data ou hora. Para registrar uma data ou hora, use um datetime2 tipo de dados.
Comentários
Cada banco de dados tem um contador que é incrementado para cada operação de inserção ou atualização executada em uma tabela que contém uma coluna rowversion dentro do banco de dados. Esse contador é a versão de linha do banco de dados. Isso rastreia um tempo relativo dentro de um banco de dados, não um tempo real que pode ser associado a um relógio. Uma tabela pode ter apenas uma versão de linha coluna. Sempre que uma linha com uma coluna rowversion
O Transact-SQL tipo de dados de carimbo de data/hora é diferente do tipo de dados de carimbo de data/hora definido na norma ISO.
Observação
A sintaxe de carimbo de data/hora
Em uma instrução CREATE TABLE ou ALTER TABLE, não é necessário especificar um nome de coluna para o timestamp tipo de dados, por exemplo:
CREATE TABLE ExampleTable (PriKey int PRIMARY KEY, timestamp);
Se você não especificar um nome de coluna, o Mecanismo de Banco de Dados do SQL Server gerará o carimbo de data/hora
CREATE TABLE ExampleTable2 (PriKey int PRIMARY KEY, VerCol rowversion) ;
Observação
Valores de de versão de linha
Uma coluna rowversion
Você pode usar a rowversion coluna de uma linha para determinar facilmente se uma instrução update foi executada na linha desde a última vez que foi lida. Se uma instrução update for executada na linha, o valor rowversion será atualizado. Se nenhuma instrução update for executada na linha, o valor rowversion será o mesmo de quando foi lido anteriormente. Para retornar o valor rowversion atual de um banco de dados, use @@DBTS.
Você pode adicionar uma coluna rowversion a uma tabela para ajudar a manter a integridade do banco de dados quando vários usuários estiverem atualizando linhas ao mesmo tempo. Você também pode querer saber quantas linhas e quais linhas foram atualizadas sem consultar novamente a tabela.
Por exemplo, suponha que você crie uma tabela chamada MyTest
. Você preenche alguns dados na tabela executando as seguintes instruções Transact-SQL.
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
Em seguida, você pode usar as instruções de Transact-SQL de exemplo a seguir para implementar o controle de simultaneidade otimista na tabela MyTest
durante a atualização. O script usa <myRv>
para representar o valor rowversion da última vez que você leu a linha. Substitua o valor pelo valor real rowversion. Um exemplo de um valor real de rowversion
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;
Você também pode colocar a amostra Transact-SQL instruções em uma transação. Ao consultar a variável @t
no escopo da transação, você pode recuperar a coluna de myKey
atualizada da tabela sem consultar novamente a tabela MyTest
.
O exemplo a seguir é o mesmo usando a sintaxe carimbo de data/hora <myTS>
por um carimbo de data/hora real .
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;
Ver também
TABELA ALTER (Transact-SQL)
CAST e CONVERT (Transact-SQL)
CRIAR TABELA (Transact-SQL)
Tipos de dados (Transact-SQL)
DECLARE @local_variable (Transact-SQL)
DELETE (Transact-SQL)
INSERIR (Transact-SQL)
MIN_ATIVE_ROWVERSION (Transact-SQL)
SET @local_variable (Transact-SQL)
UPDATE (Transact-SQL)