Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Aplica-se a: SQL Server 2022 (16.x) e versões posteriores
Banco de Dados SQL do Azure
Instância Gerenciada do Azure SQL
Este artigo mostra como criar uma tabela do razão atualizável. Em seguida, você inserirá valores em sua tabela do razão atualizável e, em seguida, fará atualizações nos dados. Por fim, você exibirá os resultados usando o modo de exibição do razão. Usaremos um exemplo de um aplicativo bancário que acompanha saldos bancários dos clientes nas respectivas contas. O exemplo fornecerá uma visão prática da relação entre a tabela do razão atualizável e a tabela de histórico correspondente, bem como a exibição do razão.
Pré-requisitos
Criando uma tabela do razão atualizável
Criaremos uma tabela de saldo de contas com o esquema a seguir.
| Nome da coluna | Tipo de dados | Descrição |
|---|---|---|
| CustomerID | INT | ID do cliente – chave primária clusterizada |
| Sobrenome | varchar (50) | Sobrenome do cliente |
| Nome | varchar (50) | Nome do cliente |
| Saldo | decimal (10,2) | Saldo da conta |
Use o SQL Server Management Studio para criar um novo esquema e uma tabela chamada
[Account].[Balance].CREATE SCHEMA [Account]; GO CREATE TABLE [Account].[Balance] ( [CustomerID] INT NOT NULL PRIMARY KEY CLUSTERED, [LastName] VARCHAR (50) NOT NULL, [FirstName] VARCHAR (50) NOT NULL, [Balance] DECIMAL (10,2) NOT NULL ) WITH ( SYSTEM_VERSIONING = ON (HISTORY_TABLE = [Account].[BalanceHistory]), LEDGER = ON );Observação
A especificação do argumento
LEDGER = ONserá opcional se você tiver habilitado um banco de dados do razão quando criou o banco de dados.Quando a tabela do razão atualizável é criada, a tabela de histórico correspondente e a exibição do razão também são criadas. Execute os comandos T-SQL a seguir para ver a nova tabela e a nova exibição.
SELECT ts.[name] + '.' + t.[name] AS [ledger_table_name] , hs.[name] + '.' + h.[name] AS [history_table_name] , vs.[name] + '.' + v.[name] AS [ledger_view_name] FROM sys.tables AS t JOIN sys.tables AS h ON (h.[object_id] = t.[history_table_id]) JOIN sys.views v ON (v.[object_id] = t.[ledger_view_id]) JOIN sys.schemas ts ON (ts.[schema_id] = t.[schema_id]) JOIN sys.schemas hs ON (hs.[schema_id] = h.[schema_id]) JOIN sys.schemas vs ON (vs.[schema_id] = v.[schema_id]) WHERE t.[name] = 'Balance';
Insira o nome,
Nick Jones, como um novo cliente com um saldo de abertura de US$ 50.INSERT INTO [Account].[Balance] VALUES (1, 'Jones', 'Nick', 50);Insira os novos
John Smith,Joe SmitheMary Michaelscomo novos clientes com saldos de abertura de US$ 500, US$ 30 e US$ 200, respectivamente.INSERT INTO [Account].[Balance] VALUES (2, 'Smith', 'John', 500), (3, 'Smith', 'Joe', 30), (4, 'Michaels', 'Mary', 200);Veja a tabela do razão atualizável
[Account].[Balance], e especifique as colunas GENERATED ALWAYS adicionadas à tabela.SELECT [CustomerID] ,[LastName] ,[FirstName] ,[Balance] ,[ledger_start_transaction_id] ,[ledger_end_transaction_id] ,[ledger_start_sequence_number] ,[ledger_end_sequence_number] FROM [Account].[Balance];Na janela de resultados, primeiro, você verá os valores inseridos pelos comandos T-SQL, juntamente com os metadados do sistema usados para fins de linhagem de dados.
A coluna
ledger_start_transaction_idanota a ID de transação exclusiva associada à transação que inseriu os dados. ComoJohn,Joe, eMaryforam inseridos usando a mesma transação, eles têm a mesma ID de transação.A coluna
ledger_start_sequence_numberanota a ordem pela qual os valores foram inseridos pela transação.
Atualize o saldo de
Nickde50para100.UPDATE [Account].[Balance] SET [Balance] = 100 WHERE [CustomerID] = 1;Exiba o modo de exibição do razão
[Account].[Balance]com o modo de exibição do sistema de razão de transação para identificar os usuários que fizeram as alterações.SELECT t.[commit_time] AS [CommitTime] , t.[principal_name] AS [UserName] , l.[CustomerID] , l.[LastName] , l.[FirstName] , l.[Balance] , l.[ledger_operation_type_desc] AS Operation FROM [Account].[Balance_Ledger] l JOIN sys.database_ledger_transactions t ON t.transaction_id = l.ledger_transaction_id ORDER BY t.commit_time DESC;Dica
Recomendamos que você consulte o histórico de alterações por meio da exibição do razão, não da tabela de histórico.
O saldo da conta de
Nickfoi atualizado com êxito para100na tabela do razão atualizável.
A exibição do razão mostra que a atualização da tabela do razão é umaDELETEda linha original com50. O saldo com umINSERTcorrespondente de uma nova linha com100mostra o novo saldo comoNick.
Permissões
A criação de tabelas do razão atualizáveis exige a permissão ENABLE LEDGER. Para obter mais informações sobre as permissões relacionadas às tabelas do razão, confira Permissões.