Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
Aplica-se a: SQL Server 2022 (16.x) e versões
posteriores Azure SQL Database
Azure SQL Managed Instance
Este artigo mostra como criar uma tabela contábil atualizável. Em seguida, você inserirá valores em sua tabela contábil atualizável e, em seguida, fará atualizações nos dados. Finalmente, você visualizará os resultados usando a visualização contábil. Usaremos um exemplo de um aplicativo bancário que rastreia os saldos dos clientes bancários em suas contas. Nosso exemplo lhe dará uma visão prática da relação entre a tabela de registo atualizável, sua tabela de histórico correspondente e a visualização de registo.
Pré-requisitos
Criar uma tabela contábil atualizável
Criaremos uma tabela de saldo de conta com o esquema a seguir.
| Nome da coluna | Tipo de dados | Description |
|---|---|---|
| ID do Cliente | int | ID do cliente - Chave primária agrupada |
| Apelido | Varchar (50) | Apelido do cliente |
| Primeiro 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 nova tabela chamados
[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
Especificar o
LEDGER = ONargumento é opcional se você habilitou um banco de dados contábil quando criou seu banco de dados.Quando sua tabela contábil atualizável é criada, a tabela de histórico correspondente e a visualização do razão também são criadas. Execute os seguintes comandos T-SQL 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 Jonescomo um novo cliente com um saldo inicial de $50.INSERT INTO [Account].[Balance] VALUES (1, 'Jones', 'Nick', 50);Insira os nomes
John Smith,Joe SmitheMary Michaelscomo novos clientes com saldos de abertura de $500, $30 e $200, respectivamente.INSERT INTO [Account].[Balance] VALUES (2, 'Smith', 'John', 500), (3, 'Smith', 'Joe', 30), (4, 'Michaels', 'Mary', 200);Exiba a
[Account].[Balance]tabela contábil atualizável e especifique as colunas GERADO SEMPRE 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, você verá primeiro os valores inseridos pelos comandos T-SQL, juntamente com os metadados do sistema usados para fins de linhagem de dados.
A
ledger_start_transaction_idcoluna indica o ID exclusivo da transação associado à transação que inseriu os dados. PorqueJohn,JoeeMaryforam inseridos usando a mesma transação, eles compartilham o mesmo ID de transação.A
ledger_start_sequence_numbercoluna observa 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 a visualização do
[Account].[Balance]livro-razão, bem como a visualização do sistema de livro-razão de transações, 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;Sugestão
Recomendamos que você consulte o histórico de alterações por meio da visualização contábil e não da tabela de histórico.
NickO saldo da conta foi atualizado com êxito na tabela de contabilidade atualizável para100.
A visualização do razão mostra que a atualização da tabela contábil é umaDELETEda linha original com50. O saldo correspondente aINSERTde uma nova linha com100mostra o novo saldo paraNick.
Permissions
A criação de tabelas contábeis atualizáveis requer a ENABLE LEDGER permissão. Para obter mais informações sobre permissões relacionadas a tabelas contábeis, consulte Permissões.